length() mit geometrischen Datentypen

Hi,

ist das hier 'n Bug oder 'n Feature?

length(lseg('(0,0),(2,0)')) = 2



length(path('(0,0),(2,0)')) = 4

Erste Lösung ist offensichtlich korrekt.
Egal, wie viele Knoten der path enthält, die length()-Funktion erzählt einem immer, dass er doppelt so lang wäre, wie er wirklich ist.

Meine Version ist 8.0.2 auf XP.
Kommen andere OS und Versionen auf andere Ergebnisse?

CU
frö

hi,

also mein 8.1.1 auf linux (kompiliert aus sourcen) liefert das gleiche…

cu tb.

Hallo Fröstel,

nix BUG, Doku richtig lesen!

length(lseg('(0,0),(2,0)')) =  length(path '[(0,0),(2,0)]')

length(lseg('(0,0),(2,0)')) <> length(path '((0,0),(2,0))')

mfg

fristo

Hi,

jow so wird wenigstens halbwegs 'n Schuh draus.

Finde allerdings die Intuition dahinter nicht so 100%ig nachvollziehbar. Wenn ich ein paar Knoten zu einem Pfad zusammenfüge, dann würde ich davon ausgehen, dass es ein offener Pfad ist, es sei denn ich mache explizit, dass er geschlossen sein soll. In Anbetracht des Datentyps polygon, welches ein geschlossener Pfad ist und syntaktisch wie ein solcher aussieht, würde ich als Default genau den anderen Fall erwarten.

Vielleicht hab ich deswegen nicht so genau hingeguckt - oder auch, weil mein Fall immer genau das doppelte lieferte.

CU
frö

Hallo Fröstel,

na ja, ich habe den Typ nicht definiert.


Vielleicht hat man das extra so gemacht, damit man mit der Nase darauf stösst. Der 3. Parameter “open/closed” ist ja auch nicht im Datensatz (Tabelle) sichtbar. Ein echter Schwachsinn! Von Mathematik muss der Erfinder nicht viel verstanden haben!



mfg

fristo

Hi,

na ja, ich habe den Typ nicht definiert.

Schade, sonst hätte ich ja gleich den richtigen erwischt :smiley:

Von Mathematik muss der Erfinder nicht viel verstanden haben!

Von Usability wohl auch nicht. Hatte mich ein bisschen mit dem path-Datentyp (s. hier) auseinandergesetzt und vermute es auch für einige andere der geometrischen Datentypen. Sie stehen zur Verfügung, aber man kann nicht so richtig was damit anfangen.

Habe bisher keine Möglichkeit gefunden, einen Pfad zu verlängern (da drängt sich doch der ‘||’-Operator geradezu auf) oder auf einzelne Element mit Hilfe der Index-Schreibweise zuzugreifen.

Für mich sieht das wie eine irgendwann mal angefangene und nicht zu Ende geführte Baustelle aus. Insofern ganz schön überflüssig. Kann ich alles ohne grossen Aufwand mit 'nem point[]-Array genauso machen.

:?:
Kommt man an die einzelnen Datentypen eigentlich auf einer tieferen Ebene ran? Ich meine jetzt nicht bei Bytes, sondern vielleicht auf Zeichen-Ebene. Es müsste sich doch jeder Datentyp in eine Zeichenkette umwandeln lassen können und - korrekte Syntax vorausgesetzt - wieder zurück.


CU
frö

Hier haste schon mal Pech gehabt. Ansonsten musste Dich noch ziemlich Anstregen.



Genau, so isses. Ich wüßte kein Einsatzgebiet für das unflexible Zeug.



Du wirst auch nichts finden. Schau dir mal die Funktionen für die Typen an. Und über den Array-Index kann man auch nicht zugreifen. Die Fehlermeldung schreit dann immer: “Ich bin kein Array”. Als intern wohl als Text abgelegt.



Für mich persönlich sehe ich auch keine Anwendungsgebiet, aber vielleicht hatte da jemand mal 'ne Anwendung für.



Stimmt. Aber hatte der Entwickler auch schon den Array-Typ zur Verfügung?



Ich glaube nicht. Da ist nichts machbar. Mann kennt ja auch nicht die innere Struktur, ansonsten könnte man eine CAST-Funktion schreiben.



mfg

fristo