Einfallswinkel berechnen.



  • Hallo.
    Weiß jemand wie man den Einfallswinkel berechnen kann(Mit einem Richtungsvektor und einer Flächennormale)?

    Danke. 🙂



  • Wofür genau meinst du, diesen Winkel zu brauchen?



  • Für die Kollisionsbearbeitung.



  • Dein Stichwort lautet Skalarprodukt. Aber wenn es eines gibt, das ich in all den Jahren gelernt habt, dann, dass du praktisch immer gerade dabei bist, etwas falsch zu machen, wenn du irgendwelche Winkel explizit ausrechnest, da es normalerweise immer einen besseren Weg gibt, das gesuchte Ergebnis direkt auf geometrischem Wege zu konstruieren...

    Um dir aber eine bessere Antwort geben zu können, müsste man jetzt natürlich wissen, was genau das von dir gesuchte Ergebnis ist...



  • Naja,das was ich brauche ist der Ausfallswinkel,oder jalt der neue Richtungsvektor.



  • Folgender Code ist ein Beispiel in Lua. 2 Tables, welche als 2D Vektoren dienen, werden der Funktion degree übergeben, um den Winkel im Bereich 179.9¯-179.\bar{9} bis 180180 zu berechnen.

    function degree(vec1, vec2)
    	local deg = math.deg(
    		math.acos(
    			vec1[1] * vec2[1] + vec1[2] * vec2[2]
    			/
    			(math.sqrt(vec1[1]^2 + vec1[2]^2) * math.sqrt(vec2[1]^2 + vec2[2]^2))
    		)
    	)
    	return vec1[1] * vec2[2] - vec1[2] * vec2[1] < 0 and -deg or deg
    end
    
    print(degree({0,-1}, {-1,0}))
    

    -90

    Winkel: cosϕ=ababcos \phi = \frac{\vec{a} * \vec{b}}{|\vec{a}| * |\vec{b}|}
    Richtung: axb\vec{a}x\vec{b}



  • Dacht ich mir schon fast, dafür brauchst du natürlich keinen Winkel, das kann man wunderbar konstruieren. Du rechnest dir die Projektion des Richtungsvektors auf die Normale aus (bekommst du über das Skalarprodukt). Wenn du diese zweimal vom Richtungsvektor subtrahierst, bekommst du die um die Normale reflektierte Richtung...



  • Ok,danke.
    Aber ich ziehe einfacherhalber,die Lösung von dot vor.
    Also natürlich auch danke an dot.



  • Hmmm...Irgendetwas stimmt nicht.
    Hab die Formel in einem 2-Dimensionalen Raum getestet.

    Als Beispiel:
    Normalenvektor(x/y): 0/1
    Richtungsvektor(x/y): 2/-2

    Formel:
    Richtungsvektor.x - (2 * Skalarprodukt(Normale,Richtungsvektor)) = Ausfallsvektor.x
    Richtungsvektor.y - (2 * Skalarprodukt(Normale,Richtungsvektor)) = Ausfallsvektor.y

    Rechnung:
    2 - (2 * -2) = 6
    -2 - (2 * -2) = 2

    Eigentlich müssten die neuen Vektoren 2/2 sein.

    Kann mir jmd. bitte helfen?



  • Das Skalarprodukt von Normale und Richtungsvektor allein gibt dir nicht die Projektion, sondern nur die Länge der Projektion...



  • Achso. 🙂
    Aber wie errechnet man die Projektion genau?



  • Die fertige Formel lautet:

    r=v2n,vn\mathrm{\mathbf r} = \mathrm{\mathbf v} - 2 \cdot \left\langle\mathrm{\mathbf n}, \mathrm{\mathbf v}\right\rangle \cdot \mathrm{\mathbf n}

    wobei ,\left\langle\cdot, \cdot\right\rangle das Skalarprodukt bezeichnet und n\mathrm{\mathbf n} normalisiert sein muss...



  • Danke. 🙂


Log in to reply