"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

[2D]Zufallswinkel zu Vektor addieren

IsSuE 21.11.2013 - 15:35 1731 3
Posts

issue

Rock and Stone, brother!
Avatar
Registered: Feb 2003
Location: Linz
Posts: 3644
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

master of disaster
Avatar
Registered: Feb 2004
Location: OÖ
Posts: 5210
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?
Avatar
Registered: Apr 2005
Location: VBG
Posts: 5639
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

Rock and Stone, brother!
Avatar
Registered: Feb 2003
Location: Linz
Posts: 3644
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.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz