Punkt auf einer Linie finden...

Neue Frage »

Telefisch Auf diesen Beitrag antworten »
Punkt auf einer Linie finden...
Hallo Ihr Wissenden...
Ich bin blutiger Anfänger in Sachen geometrische Berechnungen, falls meine Frage überhaupt in diese Kategorie gehört.

Also...
Meine Aufgabe besteht darin eine gezeichnete Linie (Anfangs und Endpunkt als 3D-Koordinate bekannt) daraufhin zu untersuchen, ob ein (ebenfalls als 3D-Koordinate) bekannter Punkt auf ihr liegt.
Das ganze befindet sich in einer CAD-Zeichnung, die ich programmatisch auslese und somit die üblichen CAD-Koordinaten erhalte.

Könnt Ihr mir bei diesem Problem weiter helfen?

danke, TELE
Rare676 Auf diesen Beitrag antworten »

Ich weiß nicht wirklich was du mit deinen Zeichnungen meinst und kann dir auch nicht beim programmieren helfen. Aber ich denke, dass willst du auch nicht.

Normalerweise solltest du einfach die Geradengleichung aus den 2 Punkten erstellen (die Koords sind ja bekannt) und danach einfach die Punktprobe mit dem anderen Punkt machen.
riwe Auf diesen Beitrag antworten »

für einen punkt X gilt, falls er auf der strecke von AB liegt:



inclusive der eckpunkte A und B smile
Telefisch Auf diesen Beitrag antworten »

Hallo Ihr Zwei...
vielen Dank für die schnelle Antwort.
Wie gesagt bin ich absoluter newbe in diesem Thema, daher kommt mir Eure Ansage etwas spanisch vor.

riwe, kannst Du das etwas erklären?

Also a ist wohl der Startpunkt und b der Endpunkt, richtig?
Was ist t? und was ist das Ergebnis?

Sorry, wenn ich mich etwas dämlich anstelle, ich studiere parallel mein Buch "3D_Grafik Programmierung" um selbst zur Lösung beizutragen Lesen2

tnx Tele
riwe Auf diesen Beitrag antworten »

das ist die vektorielle darstellung einer geraden mit dem parameter t
vielleicht hilft ein 2D-bilderl smile
Telefisch Auf diesen Beitrag antworten »

Ok, wenn ich das richtig verstanden habe stelle ich die Formel wie folgt um:



und prüfe ob 0<=t<=1
wobei hier x der gesuchte Punkt ist.
 
 
AD Auf diesen Beitrag antworten »

Zitat:
Original von Telefisch

geschockt geschockt geschockt

Dir ist wohl völlig entgangen, dass hier Vektoren sind! Wie willst du durch Vektoren dividieren? unglücklich
Telefisch Auf diesen Beitrag antworten »

Hab ich auch schon gemerkt... unglücklich

Damit wäre ich wieder am Anfang.

Also nochmal etwas zum Verständnis:

a ist also der Vektor von 0,0,0 nach Startpunkt A?
entsprechend B?

Und nu?
riwe Auf diesen Beitrag antworten »

du mußt halt das lgs in den komponenten der (orts)vektoren lösen:



hier paßt nun

smile

gibt es eine lösung, liegt X auf der geraden durch A und B,
rest siehe oben
Telefisch Auf diesen Beitrag antworten »

...hallo riwe...
es ist mir ja fast schon peinlich nochmal nachfragen zu müssen aber was meinst Du mit lgs in den Komponenten der vektoren lösen?
Meinst Du damit die Berechnung für x,y und z Koordinate getrennt voneinander auszuführen?

Wenn ich das mache bekomme ich teilweise ungültige Ergebnisse.

danke Carsten
Telefisch Auf diesen Beitrag antworten »

Hmm...
ich bin nun ein kleines Stück weiter:

zunächst konvertiere ich alle Koordinaten in Vektoren (damit ich in meiner Software mit den richtigen Objekten arbeite).

Jetzt errechne ich den Vektor zwischen Start- und Endpunkt.
Und dann berechne ich nach folgender Formel:

t=(x-a)/v

das jeweils für X, Y und Z getrennt.
Wenn jetzt alle Ergebnisse gleich sind, passt der Punkt.
Stimmt das so?

Bleibt nur ein Problem. Wie gehe ich damit um, wenn eine der Koordinaten 0 ist?
Dann bekomme ich eine ungültige Division durch 0 unglücklich



Hier als Code, für den, den es interessiert:

//Punkte in Vektoren casten
Vector3D OrtsvektorBlock = ( Vector3D )insertPoint;
Vector3D OrtsvektorStart = ( Vector3D )Startpoint;
Vector3D OrtsvektorEnde = ( Vector3D )Endpoint;

//Vektor zwischen Start und Ende bestimmen
Vector3D LinienVektor = OrtsvektorEnde - OrtsvektorStart;

//rechnen
object tX = ( OrtsvektorBlock.X - Startpoint.X ) / LinienVektor.X;
object tY = ( OrtsvektorBlock.Y - Startpoint.Y ) / LinienVektor.Y;
object tZ = ( OrtsvektorBlock.Z - Startpoint.Z ) / LinienVektor.Z;

//vergleichen
....

tnx Carsten
AD Auf diesen Beitrag antworten »

Zitat:
Original von Telefisch
Bleibt nur ein Problem. Wie gehe ich damit um, wenn eine der Koordinaten 0 ist?

Zeichne dir die Situtation doch mal auf, dann solltest du selbst drauf kommen. Augenzwinkern
Telefisch Auf diesen Beitrag antworten »

..also im Grunde habe ich das Problem ja nur, wenn es eine senkrechte oder waagerechte Lini ist.

Wenn also bsp. v.x = 0 ist muss ich nur schauen, ob a.x = x.x oder b.x = x.x

Dann weiß ich sofort, ob der Punkt auf der Linie liegen kann. Richtig?
AD Auf diesen Beitrag antworten »

Genau.
Telefisch Auf diesen Beitrag antworten »

Jo, feini...

und wenn ich jetzt noch die Genauigkeit von double auf decimal caste, bekomm ich auch die richtigen Ergebnisse.

Prost

Dankeee Gott
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »