Schnittpunkt zweier geraden in R3



  • Hallo,
    ich habe ein kleines Problem bei einem projekt von mir.
    Und zwar geht es darum, dass ich im R3 ein Dreieck, gegeben durch drei Vektoren V1, V2, V3 und eine Gerade durch zwei Vektoren habe.

    Jetzt will ich den Punkt wissen, wo die Gerade das Dreieck schneidet.

    Mein genereller Lösungsansatz ist:

    - Schnittpunkt V0 der Gerade mit der Ebene des Dreiecks berechnen.
    - Faktor t von V0 des Schnittpunkts geraden V1, V0 und V2, V3 berechnen.
    Mit Faktor t meine ich den Faktor aus dieser Form: V1 + (V0 - V1)*t

    Wenn t >= 1 ist, ist der Schnittpunkt innerhalb des Dreiecks, wenn nicht, ausserhalb.

    Das Berechnen des Schnittpunktes mit der Ebene ist nicht das Problem, das Funktioniert.

    Das berechnen von t funktioniert leider nicht so ganz, die Faktoren werden nicht richtig berechnet.

    generell funktioniert das ja so, dass ich die zwei Vektorgleichungen gleichsetze, die faktoren berechne und wieder in die Gleichungen einsetze.

    Mit der Funktion berechne ich den Faktor t:

    if (v.magnitude() == 0)
    {
    	return 0;
    }
    
    double x1, x2, x3, x4, y1, y2, y3, y4, z1, z2, z3, z4, t, r;
    
    x1	= base.x(); // base = 1. Punkt des Dreiecks, absolut
    y1	= base.y();
    z1	= base.z();
    
    x2	= v.x(); // v = Schnittpunkt mit der Ebene, relativ zu base
    y2	= v.y();
    z2	= v.z();
    
    x3	= p1().x(); // p1 = 2. Punkt des Dreiecks, absolut
    y3	= p1().y();
    z3	= p1().z();
    
    x4	= p2().x(); // p2 = 3. Punkt des Dreiecks, relativ zu p1
    y4	= p2().y();
    z4	= p2().z();
    
    double right	= y4*x2-x4*y2;
    
    if (right == 0 || x2 == 0)
    {
    	return 0;
    }
    
    r		= (y1*x2+x3*y2-x1*y2-y2*x2) / right;
    
    t		= (x3+r*x4-x1) / x2;
    
    if (r > 1 || r < 0) // hier wird überprüft, ob der Schnittpunkt zwischen p1 und p2 liegt.
    {
    	return 0;
    }
    
    return t;
    

    Jetzt probiere ich das ganze aus.
    Mit einem Dreieck (1, 1, 1), (10, 10, 0), (20, 0, 0)
    dabei sind die beiden letzten punkte schon relativ zum ersten.
    Die Gerade ist (10, 5, -2), (0, 0, 4)

    Der Schnittpunkt ist hierbei ja offensichtlich (10, 5, 1).

    Wenn ich jetzt den Faktor berechnen will, ist r = -0.1 und t = 1, das kann aber nicht richtig sein.

    Vielleicht sieht jemand meinen Fehler, ich komm alleine einfach nicht weiter.

    Grüße



  • Hat sich erledigt, ich hatte nur eine falsche variable benutzt.


Anmelden zum Antworten