URL: https://www.overclockers.at/coding-stuff/2dzufallswinkel-zu-vektor-addieren_236841/page_1 - zur Vollversion wechseln!
Hu!
Ich hoff das ist das richtige Subforum, sonst bitte moven.
Ich habe einen Ball, der von einer Schiefen ebene reflektiert wird. Den Ausfallsvektor habe ich berechnet und das funktioniert jetzt auch ganz gut. Nur faehrt mein Ball immer gleich ueber die Oberflaeche und reflektiert immer gleich. Daher moecht ich einen Random Winkel zwischen 0 und 15° grad bei jeder Reflexion dazunehmen.
Steh allerdings komplett am Schlauch wie ich das machen koennte. Hier die relevanten Code Snippets
Code:function reflect(v,n){ // R = V - 2 * (V · N) var d = dot(v,n); return { x:v.x -2 * d * n.x, y:v.y -2 * d * n.y } }
Code:var rv = reflect(getVector(getCurrentVector()),normalize(getVector(ground[i]))); circle.speed.x = rv.x; circle.speed.y=rv.y;
Code:move: function(){ this.vector.y = this.vector.y + this.speed.y; this.vector.x = this.vector.x + this.speed.x; this.draw(); }
rechne dir die länge des vektors aus
addiere nen zufälligen vektor (kannst ja einfach ne zufallszahl je koordinate reinpacken) zum vorhandenen
skaliere den neuen vektor auf die gleiche länge wie den alten
den zufallsvektor würd ich aber auf hausnummer 3-5% von der ursprünglichen vektorlänge begrenzen
sonst streut das ding gar so arg
Hypothetischer Fall :Zitat von IsSuEHu!
Ich hoff das ist das richtige Subforum, sonst bitte moven.
Ich habe einen Ball, der von einer Schiefen ebene reflektiert wird. Den Ausfallsvektor habe ich berechnet und das funktioniert jetzt auch ganz gut. Nur faehrt mein Ball immer gleich ueber die Oberflaeche und reflektiert immer gleich. Daher moecht ich einen Random Winkel zwischen 0 und 15° grad bei jeder Reflexion dazunehmen.
Steh allerdings komplett am Schlauch wie ich das machen koennte. Hier die relevanten Code SnippetsCode:function reflect(v,n){ // R = V - 2 * (V · N) var d = dot(v,n); return { x:v.x -2 * d * n.x, y:v.y -2 * d * n.y } }
Den daraus resultierenden Vektor addiere ich nach Kollision mit dem schiefen Objekt zum jetzigen Vektor meines BallesCode:var rv = reflect(getVector(getCurrentVector()),normalize(getVector(ground[i]))); circle.speed.x = rv.x; circle.speed.y=rv.y;
Code:move: function(){ this.vector.y = this.vector.y + this.speed.y; this.vector.x = this.vector.x + this.speed.x; this.draw(); }
Zum rv kann ich ja nicht einfach was dazu addieren, weil sich sonst der Ball schneller bewegt.
Jemand da einen Vorschlag wie ich das loesen koennte?
TIA Armin
Jo sehr fein! Danke euch zwei. Ich zaehl jetzt zu meinem rv einen vektor dazu und normalisiere diesen wieder. Das ist dann mein neuer richtungsvektor.
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025