Objekt Steil Bewegen
-
Hi,
// bewegen des balles in 360 grad, ausgangspunkt wie im Koordinatensystem // | - | // | - | // | - | // | - | // | - \ | 60° // |- \ | //--------------- ------------------------- // | // | // | // | // | // void FallingObject::MoveDegrees ( float Degrees, float Range ){ float Y; Degrees = 360 - Degrees; short int ModifierX = 1; short int ModifierY = 1; if ( Degrees == 90 ){ Y = Range; Range = 0; }else if ( Degrees == 180 ){ Y = 0; Range *= -1; }else if ( Degrees == 270 ){ Y = Range * -1; Range = 0; }else if ( Degrees == 360 ){ Y = 0; }else{ if (( Degrees > 90 ) && ( Degrees < 180 )){ Degrees -= 90; ModifierX = -1; } if (( Degrees > 180 ) && ( Degrees < 270 )){ Degrees -= 180; ModifierX = -1; ModifierY = -1; } if (( Degrees > 270 ) && ( Degrees < 360 )){ Degrees -= 270; ModifierY = -1; } Degrees = Degrees * M_PI/180; do{ // Problemstelle if ( Y != 0 ){ Range++; } Y = tan(Degrees) * Range ; }while ( !abs(Y) );// Kann keine koordinaten unter 0 zeichnen // Abs gibt int zurück < 0 = 0 } Y *= (float)ModifierY; Range *= (float)ModifierX; Move(Range,Y); }das is die bewegungsmethode für mein objekt, wie man sieht nach grad.
Nur hab ich jetzt das problem das je steiler die gradzahl ( steil = hohe grad aber != 90,180,270,360 ) desto schneller der ball. hab ihr ne idee wie man das viell. geschikter lösen könnte?
-
Hallo
So ganz blick ich durch deinen Code nicht durch, das Problem dürfte aber laut Beschreibung im Prinzip stecken. Nehmen wir mal deine Skizze und sagen das dein Objekt die Strecke a pro Zeitintervall zurücklegen soll, unabhängig vom Winkel. Dann ist deine aktuelle Berechnung so
// | - | // | b - | // | - | // | - | // | - \ | 60° // |- \ | //--------------- ------------------------- // |<- a ->|Dadurch ergibt sich aber je nach Winkel dann eine höhere effektive Geschwindigkeit pro Zeitintervall, hier durch Strecke b dargestellt!
Du setzt also a der Bewegung auf der X-Achse gleich und berechnest daraus b.Sondern die Strecke a muß die Strecke sein, die sich nach dem Einrechnen des Winkels ergibt
// | - | // | a - | // | - | // | - | // | - \ | 60° // |- \ | //--------------- ------------------------- // | |Dann bleibt die effektive Geschwindkeit gleich.
Die Rechnung wäre hier aus a sowohl die Bewgung auf der Y-Achse (sinus) als auch auf der X-Achse (cosinus) zu berechnen.
Siehe auch Vektorrechnung.bis bald
akari
-
Sondern die Strecke x muß die Strecke sein, die sich nach dem Einrechnen des Winkels ergibt
Einrechnen in was? Die gesammtstrecke gibts noch garnicht ^^'' ( wirds auch nie geben )
Aber hört sich ja ganz nett an aber sagen wir mal.
es prallt auf die wand auf. er macht eingangs = ausgangswinkel und wir haben z.B. 89 grad dann sag ich X is 1 und Y? naja das wäre dann ja ziemlich klein. und da lag das problem das ich vorher hatte. wenn X ne gewisse grenze unterschreitet kann ers nicht zeichnen weil die koordinaten sich unter 0 verändern. und die zeichenmethoden wollen alle int.
PS: ich mochte die x,y version mehr ^^
Die Rechnung wäre hier aus a sowohl die Bewgung auf der Y-Achse (sinus) als auch auf der X-Achse (cosinus) zu berechnen.
Siehe auch Vektorrechnung.Wie Jetzt?^^''
-
Hallo
Schurke schrieb:
Sondern die Strecke x muß die Strecke sein, die sich nach dem Einrechnen des Winkels ergibt
Einrechnen in was? Die gesammtstrecke gibts noch garnicht ^^'' ( wirds auch nie geben )
Alles rein gedanklich. Du must eben trennen zwischen drei Werten :
- Der Geschwindigkeit (Änderung der Position) auf der X-Achse
- Der Geschwindigkeit auf der Y-Achse
- Der effektiven Geschwindigkeit a, gegebenen durch Satz des Pythagoras aus X und Y
(Deshalb auch die nachträgliche Umbenennung)
Nun siehst du welche Werte variabel sind (X,Y) und welche fix (a).bis bald
akari