algorithmus/programm zum berechnen von koordinaten

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
startx
Beiträge: 3165
Registriert: 07.12.2002 19:29:48
Wohnort: london

algorithmus/programm zum berechnen von koordinaten

Beitrag von startx » 19.11.2007 18:51:04

hallo.

ich hab hier mal ein kniffligeres problem:

ich moechte die koordinaten von mehreren punkten auf einer 2 dimensionalen flaeche berechnen,
allerdings habe ich von den punktne nur die distanzen, die sie untereinander haben:

also ich habe:

distanz
a -> b : 4cm
b -> c : 6cm
a -> c : 5cm
(usw)

(das ist nur ein beispiel, evtl so nicht loesbar, aber ich hoffe ihr versteht was ich meine)

und moechte das nun graphisch dastellen, brauche also xy koordinaten.

wie gehe ich das an?

Danielx
Beiträge: 6419
Registriert: 14.08.2003 17:52:23

Re: algorithmus/programm zum berechnen von koordinaten

Beitrag von Danielx » 20.11.2007 02:07:49

Hallo!
startx hat geschrieben:wie gehe ich das an?
Hui, lustiges Problem. :-)
Es handelt sich dabei um beliebige (geschlossene) Figuren, nicht nur Dreiecke?

Mal kurz eine Idee von mir:

Stelle mit folgender Formel ein Gleichungssystem auf:
(x_a - x_b )^2 + (y_a - y_b )^2 = (Abstand Punkt a zu Punkt b)^2
Also Anzahl Punkte = Anzahl Gleichungen.

Wenn die Lage der Figur im Raum egal ist,
dann kannst du das Gleichungssystem etwa vereinfachen, indem du den ersten beiden Punkten schonmal ihre Koordinaten zuteilst, z.B.:
x_a = 0
x_b = 0
y_a = 0
y_b = Abstand Punkt a zu Punkt b

Und dann viel Spaß beim Lösen des Gleichungssystems!

Gruß,
Daniel

Danielx
Beiträge: 6419
Registriert: 14.08.2003 17:52:23

Beitrag von Danielx » 20.11.2007 11:37:04

Achja, was mir gerade auffällt:
Dein Problem ist in manchen Fällen noch nichteinmal eindeutig lösbar! 8O

Spasswolf
Beiträge: 3472
Registriert: 30.11.2005 10:32:22
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wald

Beitrag von Spasswolf » 20.11.2007 11:54:06

Anzahle der Punkte = Anzahl der Gleichungen
Wenn man tatsächlich die Abstände von allen Punkten untereinander hat stimmt das so nicht.
Bei N Punkten hat man 2N gesuchte Koordinaten und N(N - 1)/2 Gleichungen.

Danielx
Beiträge: 6419
Registriert: 14.08.2003 17:52:23

Beitrag von Danielx » 20.11.2007 12:12:34

Spasswolf hat geschrieben:Wenn man tatsächlich die Abstände von allen Punkten untereinander hat
Ja klar, hatte ich "überlesen".
War wohl um diese Uhrzeit heute Nacht nicht mehr so ganz konzentriert. :?

Spasswolf
Beiträge: 3472
Registriert: 30.11.2005 10:32:22
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wald

Beitrag von Spasswolf » 20.11.2007 13:11:43

Wenn die Abstände zwischen den Punkten exakt sind, kannst du das ganze nach und nach konstruieren:
Punkt A kommt auf den Ursprung (0,0)
Punkt B auf die X Achse (|AB|,0)
Punkt C kannst du dann aus A und B berechnen, wobei du noch die Wahl hast ob C über oder unter der X Achse liegt.
Punkt D wird aus Punkt B und C berechnet, wobei du Punkt A nimmst um zu entscheiden welche der beiden Lösungen du nimmst usw.
Wenn die Abstände nicht exakt vorliegen musst du oben erwähntes Gleichungssystem genähert lösen (nicht linearer leastsquare fit).

Benutzeravatar
startx
Beiträge: 3165
Registriert: 07.12.2002 19:29:48
Wohnort: london

Beitrag von startx » 20.11.2007 13:16:48

Wenn die Abstände zwischen den Punkten exakt sind, kannst du das ganze nach und nach konstruieren:
es mag an meiner mangelnden kaffeeversorgung heute liegen, aber magst du mir dass an einem beispiel
vorfueren?
Punkt C kannst du dann aus A und B berechnen, wobei du noch die Wahl hast ob C über oder unter der X Achse liegt.
sagen wir ich will C unterhalb der achse. lautet die gleichung um auf die koordinaten zu kommen? und wie dann weiter?

Danielx
Beiträge: 6419
Registriert: 14.08.2003 17:52:23

Beitrag von Danielx » 20.11.2007 14:58:03

startx hat geschrieben:sagen wir ich will C unterhalb der achse. lautet die gleichung um auf die koordinaten zu kommen?
Du kannst aus zwei Punkten und dem jeweiligen Abstand dieser Punkte zu einem dritten Punkt die möglichen Koordinaten des dritten Punktes berechnen.

Das Problem ist im Prinzip die Ermittlung der Schnittpunkte zweier Kreise:

Kreis 1:
Punkt A (x_a,y_a) ist Mittelpunkt des Kreises und Abstand von Punkt A zu Punkt C ist dessen Radius (r_1).
:arrow: Kreisgleichung k1:
(x-x_a)^2 + (y-y_a)^2 = r_1^2

Kreis 2:
Punkt B (x_b,y_b) ist Mittelpunkt des Kreises und Abstand von Punkt B zu Punkt C ist dessen Radius (r_2).
:arrow: Kreisgleichung k2:
(x-x_b)^2 + (y-y_b)^2 = r_2^2

Dann jeweils binomische Formel anwenden und die beiden Gleichungen voneinander subtrahieren.
Die daraus resultierende Geradengleichung kann man jetzt nach einer Variablen (hier nehme ich mal y) auflösen und in eine der beiden Kreisgleichungen einsetzen.
So findet man dann die beiden x-Koordinaten der beiden Schnittpunkte (evtl. auch nur eine, wenn sich die beiden Kreise nicht schneiden sondern lediglich berühren).
Die andere(n) Koordinate(n) (hier y-Koordinaten) findet man dann durch Einsetzen der soeben berechneten x-Koordinate(n) in die Geradengleichung.
Dann wählst du dir eine x,y-Koordinate aus oder du berechnest garnicht erst beide Lösungen sondern wählst dir gleich eine x-Koordinate aus.

Gruß,
Daniel

Danielx
Beiträge: 6419
Registriert: 14.08.2003 17:52:23

Beitrag von Danielx » 20.11.2007 15:55:52

Sorry, ich denke heute einfach etwas zu kompliziert: :lol:

Du hast ja im Prinzip für jedes Teilproblem ein Dreieck aus Punkt A, B und C.
Du kennst die Länge der drei Seiten.
:arrow:
die Winkel des Dreiecks berechnen
:arrow:
aus Vektor (A nach B) und Winkel zwischen z.B. A und C kannst du dann einfach Vektor C und damit den Punkt C berechnen!
Da du ja aber immer zwei Möglichkeiten hast, auf welcher "Seite" des Vektors du den neuen Punkt platzierst, musst du natürlich prüfen auf welcher Seite der Punkt überhaupt liegen kann, indem du z.B. beide möglichen Punkte C berechnest und dann überprüfst ob der Abstand von Punkt C zu einem weiteren schon berechneten Punkt (aber logischerweise nicht A, B oder C) stimmt, diese Möglichkeit für C wählst du dann.
Beim ersten Punkt hast du allerdings noch die freie Wahl auf welche Seite du den Punkt legst, diese Plausibilitätsprüfung machst du also erst ab Punkt D.

Punkt A und B legst du, wie schon gesagt, am Besten schon vorher fest:
A = (0,0)
B = (0,Abstand A zu B)

Ich hoffe das hilft dir jetzt weiter!

Was willst du da eigentlich programmieren?

Gruß,
Daniel

Antworten