[2D]Zufallswinkel zu Vektor addieren
IsSuE 21.11.2013 - 15:35 1731 3
issue
Rock and Stone, brother!
|
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 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 Balles var rv = reflect(getVector(getCurrentVector()),normalize(getVector(ground[i])));
circle.speed.x = rv.x;
circle.speed.y=rv.y;
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
|
smashIt
master of disaster
|
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
|
Hansmaulwurf
u wot m8?
|
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
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 Balles
var rv = reflect(getVector(getCurrentVector()),normalize(getVector(ground[i])));
circle.speed.x = rv.x;
circle.speed.y=rv.y;
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 Hypothetischer Fall : Geschwindigkeit in x-Richtung = 1; Geschwindigkeit in y-Richtung = 0; Wenn du jetzt zweitere änderst, wirst du natürlich eine Winkeländerung haben, obwohl sich vordergründig die v ändert. Ich würde einfach den Betrag vom Vektor anschauen, und dementsprechend dazuaddieren ? edit: owned. In der Arbeit posten dauert zu lang
|
issue
Rock and Stone, brother!
|
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.
|