ebenen aufspannen



  • Hi!
    Vielleicht errinnert ihr euch noch an mich?!
    Ich war der der 100tausendmal die Frage gestellt hat wie man testen kann ob ein Pkt. in einem Dreieck liegt.
    Ich habs immer noch nicht geschafft…
    Diesmal habe ich eine etwas einfachere Frage (ich schaffs trotzdem nicht…) es hat mit meinem vorhergehend Problem zu tun, eigentlich ist es mein vorhergehendes Problem:

    Ich habe ein Dreieck:

    C
      #  #
     #     #
    A#######B
    

    Wie kann ich jetzt eine Ebene folgende Ebene aufspannen:

    -------------
        C--------------
       #--------------- 
      #----------------
     A-----------------
    -------------------
    

    Also eine Art „Halbebene“.

    Ich hatte diese Überlegung:
    Die der Normalvektor ist ja im Prinzip die Ebene, also rechne ich mit den Normalvektor von A,C-A,B-A aus und wäre damit eigentlich fertig, aber wie soll ich sagen, ich bin es nicht :). Könnt ihr mir bitte helfen? Auch wenn ich ein wenig lästig bin ... ich möchte halt einfach wissen wie das geht.



  • Halbebene: P element R² mit AC*AP >= 0



  • und was ist R?



  • lol bald bin ich auch so ein Student der alles in Matheformeln aufschreibt, aber das da oben versteh ich als Mahte-GK'ler zum Glück auch noch:

    Also R² umfasst den 2D-Bereich, d.h. P hat eine x und y Koordinate.
    Für P kannst dann irgendwas einsetzen und wenn TGGC's Gleichung dann noch stimmt liegt der Punkt in der Halbebene.



  • Die Halbebene sieht dann so aus:

    ---------
    ----C----
    ---------
    ---------
    ----A----
    

    Nach deiner Zeichnung brauchst du eher Skalarprodukt aus AP und Normale von AC



  • @ggast: Ein Punkt P liegt im Dreieck ABC genau dann, wenn Dreieck ABP, Dreieck BCP, und Dreieck CAP die gleiche Orientierung besitzen.

    [java]static float area2(Point2D[] pol) {
    int n = pol.length;
    j = n-1;

    float a = 0;

    for (int i=0; i<n; i++) {
    a += pol[j].x * pol[i].y - pol[j].y * pol[i].x;
    j = i;
    }

    return a;
    }[/code]

    area2(...) ist negativ, wenn die Orientierung des Polygons negativ ist. Deswegen führt die Ausführung des folgenden Codes [java]static boolean insideTriangle(Point2D A, Point2D B, Point2D C, Point2D p) {
    return
    area2(A,B,P) >= 0 &&
    area2(B,C,P) >= 0 &&
    area2(C,A,P) >= 0;
    }[/code] für positiv orientierte Dreiecke zur Aussage ob der Punkt P im Dreieck ist oder nicht. Für negativ orientierte Dreicke muss das Ergebnis von area2 entsprechend stets negativ sein.

    Hope that helps

    [ Dieser Beitrag wurde am 10.01.2003 um 14:07 Uhr von CengizS editiert. ]



  • okay, ich werds probieren, danke für die antworten!



  • hallo, ich bins nochmal, ich verwende jetzt diesen code um zu testen ob ein pkt in einem dreick liegt:

    VECTOR3D AC=TriC-TriA;
        AP=Intersection-TriA;
    
        if(AC.vertex[0] * AP.vertex[0]+
           AC.vertex[1] * AP.vertex[1]+
           AC.vertex[2] * AP.vertex[2] <= 0) return FALSE;
    

    Intersection ist dabei der Schnittpunkt zw. einer Geraden und einer Ebene.
    So funktioniert auch alles, wenn ich aber noch testen will ob der Punkt in der Halbebene von AB und in der Halbebene BC liegt funktiert es nicht. (Das heißt die Fkt sollte ja nur TRUE zurückgeben wenn der Pkt im Dreieck, also in allen drei Halbebene liegt. [Könnte natürlich auch sein dass ich das mit den halbebenen nicht richtig verstanden habe]):

    VECTOR3D AB=vTriangleB-vTriangleA;
        AP=vIntersection-vTriangleA;
    
        if(AB.vertex[0] * AP.vertex[0]+
           AB.vertex[1] * AP.vertex[1]+
           AB.vertex[2] * AP.vertex[2] <= 0) return FALSE;
    
        VECTOR3D BC=vTriangleC-vTriangleB;
        VECTOR3D BP=vIntersection-vTriangleB;
    
        if(BC.vertex[0] * BP.vertex[0]+
           BC.vertex[1] * BP.vertex[1]+
           BC.vertex[2] * BP.vertex[2] <= 0) return FALSE;
    

    Stimmt, der Code so wie ich ihn habe (naja kann ja eigentlich nicht sein 😞 ) und wenn nicht wie kann ich das sonst machen...

    thx im vorraus!



  • Im 3D liegt ein Punkt auf der Ebene, wenn man in die Hesse'sche Normalform der Ebene die Koordinaten des Punkts einträgt und das Ergebnis 0 lautet.

    P1(3/1/5) liegt auf der Ebene durch x1-6x2+2x3-7 = 0 wegen 3-6+10-7=0
    P2(0/0/0) liegt nicht auf der Ebene da 0-0+0-7 != 0



  • Ja aber laut TGGC's Formel *g* gilt ja:Wenn der Vektor AC mal dem Vektor AP größer als 0 ist liegt der Pkt auf der Halbebene ... oder hab ich das falsch verstanden?



  • Im Raum liegt der Punkt dann logischerweise in einem Halbraum.



  • egal, mit den halbebene krieg ichs nicht zusammen, ich machs jetzt einfach mit "auf 360° prüfen" ...


Anmelden zum Antworten