Vollständige Version anzeigen : An die Mathematiker hier
Hi,
Ich hab ne Frage, und zwar muss ich für die Schule n Vektorzeichenprogramm als Programmierprojekt machen.
Jetzt weiss ich aber nicht, wie ich folgendes Problem lösen soll:
Ich hab einen Punkt P(X/Y) und möchte wissen, wie weit der von einer Linie zwischen den Punkten Pa(Xa/Xb) und Pb(Xb/Yb) eintfernt ist, also von dem nächstgelegenen Punkt dieser Linie.
Kann mir vieleicht jemand weiterhelfen?
LG
Christoph
Hi,
also mit Computerprogrammen kenn ich mich nicht aus, aber mathematisch müsste es so gehen:
Du musst auf jeden Fall die Geradengleichung in Vektorform durch die zwei Punkte bestimmen und dann den Normalenvektor zu dieser Geraden bilden, bzw. zu deren Richtungsvektor. Dann konstruierst du die Gerade, die durch den dritten Punkt geht und den Normalenvektor als Richtungsvektor hat. Dann ermittelst du aus diesen zwei geraden den Schnittpunkt und bestimmst mit der Abstandsformel den Abstand zwischen Schnittpunkt und dem dritten Punkt. Die nötigen Formeln müsstest du in jeder Formlesammlung finden.
Ich hoffe mal das war korrekt, wenn dem nicht so ist, dann korrigiert mich bitte.
Gruß
AMRH2009
08-03-2009, 22:00
Geh mal auf den Link hier:
http://nibis.ni.schule.de/~lbs-gym/Vektorpdf/AbstandPunktGerade.pdf
da müsste es ganz gut beschrieben sein.
Tipp:
Die Gerade musst du aus den Punkten Pa und Pb bilden. Also
Pa + (Pa-Pb)x =E:x (Wobei Pa der Ortvektor ist und das in der Klammer der Richtungsvektor)
Danke.:)
Nur mal so zur Kontrolle, ob ichs geschnallt hab:
>Du musst auf jeden Fall die Geradengleichung in Vektorform durch die zwei >Punkte bestimmen
Vektor v = ( Xa - Xb)
( Ya - Yb)
>und dann den Normalenvektor zu dieser Geraden bilden, bzw. zu deren >Richtungsvektor.
Normalvektor n = v / |v|
>Dann konstruierst du die Gerade, die durch den dritten Punkt geht und den >Normalenvektor als Richtungsvektor hat. Dann ermittelst du aus diesen zwei >geraden den Schnittpunkt
Pschnitt (Xschnitt/Yschnitt) = Gerade1(Berechnet aus Pa und Pb) geschnitten mit Gerade2( Berechnet aus P und P + n)
>und bestimmst mit der Abstandsformel den >Abstand zwischen Schnittpunkt >und dem dritten Punkt.
Delta X = X - Xschnitt
Delta Y = Y - Yschnitt
abstand = (Delta X ^ 2 + Delta Y ^ 2)^0.5
Richtig?
http://nibis.ni.schule.de/~lbs-gym/Vektorpdf/AbstandPunktGerade.pdf
Das Problem ist leider dass Ich keine (unendliche) Gerade hab, sondern eine durch zwei Punkte begrenzte Linie.
AMRH2009
08-03-2009, 22:36
Das ist doch egal ob Linie oder Gerade. Du bekommst ja einen nähesten Punkt raus der auf der Geraden liegt. Nun schaust du einfach ob dieser Punkt auch auf deiner Linie liegt. Wenn ja dann musst du einfach den Abstand von diesem Punkt und dem eigentlichen Punkt (von dem der näheste Abstand zur Linie gesucht ist) bilden. Falls er nicht auf deiner Linie liegt musst du einfach schauen welcher Punkt von deinen Linienenden am nähesten bei eigentlichen Punkt liegt und berechnest da dann den Abstand.
Glaub mal das es stimmt, vllt mach ich auch alles falsch :D:D
Bademeister1987
08-03-2009, 22:37
Das kannst du über ne einfache if-Bedingung ausschließen - du erhältst ja den Fußpunkt F auf deiner Gerade - wenn dieser zwischen deinen beiden Punkten liegt ist alles gut, du hast den kürzesten Abstand gefunden.
Falls nicht, so ist der der Punkt mit dem nächstkürzeren Abstand zwangsweise einer deiner Randpunkte (-> sog. Randminimum).
Für den zweidimensionalen Fall ist die verlinkte Lösung übrigens viel zu kompliziert, da geht das deutlich einfacher:
Drei Punkte, A und B bilden die Gerade, P ist der zu dem du den Abstand willst. Die senkrechten Striche sollen nen Vektor zwischen zwei Punkten bezeichnen
Du stellst die Gerade in der Form: |0A| + x * |AB| auf. Zu |AB| = (m,n) stellst du den Vektor K = (-n,m) auf. K steht senkrecht auf |AB| und zeigt somit in Richtung des kürzesten Abstandes der (noch unendlichen Gerade) zum Punkt.
Dann berechnen wir P = |0A| + x * |AB| + y*K , x und y sind die beiden Unbekannten.
Wenn 0<=x<=1, so ist der kürzeste Punkt auf der Geraden und hat den Betrag von y*K, wenn x<0, so ist der kürzeste Abstand der Betrag von |AP|, wenn x>1, so ist der kürzeste Abstand der Betrag von |BP|.
kleinershredder
09-03-2009, 02:31
So ein Scheiß. Jetzt hab ich 10 Minuten daran geschrieben, wie man das in n-Dimensionalen Räumen macht und Stelle dann fest, dass nur anch 2-Dimensionalen Räumen gefragt wird. Scheiße, jetzt hätte ich so schön rumprollen können :D
Danke für die vielen Antworten( vor allem die von Bademeister scheint effizient zu sein), werds wahrscheinlich heute noch ausprobieren :)
Bademeister1987
09-03-2009, 07:52
So ein Scheiß. Jetzt hab ich 10 Minuten daran geschrieben, wie man das in n-Dimensionalen Räumen macht und Stelle dann fest, dass nur anch 2-Dimensionalen Räumen gefragt wird. Scheiße, jetzt hätte ich so schön rumprollen können :D
Woran man mal wieder wunderschön den Unterschied Ingenieur <-> Mathematiker sieht... :D
ElCativo
09-03-2009, 10:27
Woran man mal wieder wunderschön den Unterschied Ingenieur <-> Mathematiker sieht... :D
*tränenlach*
So, habs schon mal so weit:
Pa(Xa/Ya) PB(Xb/Yb) P(X/Y)
Vektor v(i/j) = Pa - Pb
v0 = v / |v|
Vektor n(-j/i)
n0 = n / |n|
P = Pa + k*v0 + l*n0
I) X = Xa + k*i - l*j
II) Y = Ya + k*j + l*i
Weiss aber nicht, wie ich I und II auflösen soll, dass ich i und j hab:(
Bademeister1987
09-03-2009, 15:33
1. i und j kennst du doch, du suchst k und l ;)
2. Schreib dir deine beiden Gleichungen so auf ein Stück Papier und lös nach der einen Unbekannten in Abhängigkeit von den ganzen Variablen auf. Diesen Term gibst du dann einfach in den Code ein um damit die Unbekannte zu berechnen. Wenn du die eine dann hast, ist die andere einfach. Ist etwas Mathe, aber machbar.
3. Wofür brauchst du n0 und v0? Das sieht etwas komisch aus, du shcreibst da zwar v0 und n0, setzt dann aber v und n ein. Solltest du auch so tun, mit v und n, dann gehts nachher mit dem if besser.
EDIT: Falls das Rechnen mit den Variablen zu schwer ist, sag Bescheid, dann erklär ich dir wie man auf die Lösung komt.
vBulletin v4.2.5, Copyright ©2000-2025, Jelsoft Enterprises Ltd.