Berechnen, ob sich gerade und Kiste schneidet



  • Hallo,

    ich habe in 3D 8 Punkte gegeben (z1 bis z8), die eine Kiste bilden.
    Die Seiten sind immer Rechtecke und der Deckel ist sogar ein Quadrat.

    Jetzt habe ich eine gerade gegeben mit (a,b,c) + x*(d,e,f).

    Wie kann ich jetzt berechnen, ob die gerade die Kiste schneidet?



  • indem du prüfst ob die Gerade und eine Ebene der Kiste einen Punkt gemeinsam haben.



  • Danke, und wie mache ich das?



  • hast du zufällig achsenparallelen kistenkansten?
    ich frage das, weil man solche oft bei computerspielen als begrenzungskisten benutzt.
    edit: evtl ist das hier das, was du suchst: http://www.cs.utah.edu/~bes/papers/fastRT/paper-node10.html



  • Eine Gerad und ein Ebene haben genau dann genau einen Schnittpunkt, wenn ihre drei Richtugnsvektoren linear unabhängig sind. Das überprüfst du mit der Determinante.
    also für die Gerade g: (x1,y1,z1)+a*(x2,y2,z2)
    und für die Ebene dann Eben E: (x3,y3,z3)+b*(x4,y4,z4)+c*(x5,y5,z5)
    x,y,z sind ja konstant.
    Ist die Determinate der 3 Vektoren a, b, c ungleich 0 gibt es einen Schnittpunkt.(oder unendlich viele wenn die Gerade in der Ebene liegt, aber dann ist die Determinate =0)
    Dein Problem ist jetzt das du die Variabeln b und c begrenzt hast, also z. b. für b 0<=b<=5 und für c z. B. 0<=c<=4
    Jetzt schneidest du die Gerade mit der Ebene, du hast ja 3 (a, b, c)unbekannte und 3 gleichungen Zeile x , Zeile y, und Zeile z und das löst du nach a, b, c und überprüfst ob b und c im angegebenen wertebereich liegen, wenn dein Körper 6 Seiten hat musst du das mit 5 Seiten machen.
    Wenn die Gerade rechtwinklig zu einer Ebene verläuft is das alles n bisschen einfacher zu berechnen, das andere is ne Schweinearbeit.

    Wenn dein Körper absolut rechtwinklig ist kannst de ihn ja durch 3 Vektoren aufspannen. Wieder mit 3 Variabeln die du vorher begrenzt nun musst de nur noch schauen ob die Gerade die Menge des Körpers durchläuft.

    Das zu programmieren is denk ich einfacher.


Log in to reply