[2D]Zufallswinkel zu Vektor addieren

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/2dzufallswinkel-zu-vektor-addieren_236841/page_1 - zur Vollversion wechseln!


issue schrieb am 21.11.2013 um 15:35

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
    }
}

Den daraus resultierenden Vektor addiere ich nach Kollision mit dem schiefen Objekt zum jetzigen Vektor meines Balles
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();


    }

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 schrieb am 21.11.2013 um 15:54

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 schrieb am 21.11.2013 um 16:01

Zitat von IsSuE
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
    }
}

Den daraus resultierenden Vektor addiere ich nach Kollision mit dem schiefen Objekt zum jetzigen Vektor meines Balles
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();


    }

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 :p


issue schrieb am 21.11.2013 um 16:27

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