brainlag: abpralllwinkel?
-
Ruhelagen berechnen ist tatsaechlich nicht so ganz trivial, das kriegen auch die professionellen Physik Engines nie so richtig hin. Aber es wuerde sicher schonmal was bringen, wenn du testest, ob der Kollisionspunkt unten ist.
Aber was genau soll bounciness und Rutschigkeit sein? Definier das mal. f'`8k
Gruß, TGGC (making great games since 1992)
-
Hört sich nach nem Elastizitätsfaltor bzw. einem Reibungskoeffizient an. Schau dir mal die Geschichten hier an. Wird dir auf jeden Fall (früher oder später) eine Hilfe sein.
http://de.wikipedia.org/wiki/Drallsatz
http://de.wikipedia.org/wiki/Elastischer_Stoss
-
nunja, ich möchte unabhängig voneinander einstellen, wieviel energie beim aufprall in richtung des kollsionsvektors verloren geht, und wieviel energie parallel zur kollisionsoberfläche verloren geht.
-
pixartist schrieb:
nunja, ich möchte unabhängig voneinander einstellen, wieviel energie beim aufprall in richtung des kollsionsvektors verloren geht, und wieviel energie parallel zur kollisionsoberfläche verloren geht.
einfach konstatnte festlegen (bsp 0.8), und bei jedem Aufprall die x- als auch die y Geschwindigkeit damit multiplizieren, das ist ja jetzt nicht sonderlich schwer oder?
-
Krux schrieb:
pixartist schrieb:
nunja, ich möchte unabhängig voneinander einstellen, wieviel energie beim aufprall in richtung des kollsionsvektors verloren geht, und wieviel energie parallel zur kollisionsoberfläche verloren geht.
einfach konstatnte festlegen (bsp 0.8), und bei jedem Aufprall die x- als auch die y Geschwindigkeit damit multiplizieren, das ist ja jetzt nicht sonderlich schwer oder?
dein vorschlag funktioniert aber nur, wenn es keine schrägen flächen gibt...
-
pixartist schrieb:
Krux schrieb:
pixartist schrieb:
nunja, ich möchte unabhängig voneinander einstellen, wieviel energie beim aufprall in richtung des kollsionsvektors verloren geht, und wieviel energie parallel zur kollisionsoberfläche verloren geht.
einfach konstatnte festlegen (bsp 0.8), und bei jedem Aufprall die x- als auch die y Geschwindigkeit damit multiplizieren, das ist ja jetzt nicht sonderlich schwer oder?
dein vorschlag funktioniert aber nur, wenn es keine schrägen flächen gibt...
wenn du bereits die neue Richtung deiner Bewegung ausgerechnet hast, dann kannst du doch genau wie sonst auch die neue x- und y-Geschwindigkeit mit dem konstanten Faktor multiplizieren. Ist genau so schwer.
-
nein sry, du hast das wohl falsch verstanden, wenn die oberfläche, an der der ball ortogonal abprallt, z.b einen winkel von 45 grad hat, dann kann ich nicht einfach sagen, x*0.8 und y*0.2, dann springt der ball ja nicht mit 20% der energie zurück

-
also hier will ich den paralellen und ortogonalen vektor(bzw die länge) zum aufprallvektor ausrechnen, die beiden dann unabhängig von einander verkürzen und dann wieder zum bewegungsvektor zusammenfügen:
double para = apv.x*tx + apv.y*ty; double orto = apv.y*tx + (apv.x*-1)*ty; para *= 0.9; orto *= 0.3; DblPoint parav; parav.x = para*apv.x; parav.y = para*apv.y; DblPoint ortov; ortov.x = orto*apv.y; ortov.y = orto*(apv.x*-1); DblPoint newV; newV.x = parav.x + ortov.x; newV.y = parav.y + ortov.y; double vlen = sqrt(newV.x*newV.x + newV.y*newV.y); ball.dir.x = newV.x/vlen; ball.dir.y = newV.y/vlen; ball.len = vlen; cx += ball.dir.x; cy += ball.dir.y;irgendwie klappts aber ned so

EDIT:
Habs!
apv.x /= 2; apv.y /= 2; double tx = ball.dir.x*ball.len; double ty = ball.dir.y*ball.len; double projektion = apv.x*tx + apv.y*ty; ball.pos.x -= apv.x; ball.pos.y -= apv.y; tx -= apv.x*(projektion*2); ty -= apv.y*(projektion*2); double para = apv.x*tx + apv.y*ty; double orto = apv.y*tx + (apv.x*-1)*ty; para *= 0.3; orto *= 0.9; DblPoint parav; parav.x = para*apv.x; parav.y = para*apv.y; DblPoint ortov; ortov.x = orto*apv.y; ortov.y = orto*(apv.x*-1); DblPoint newV; newV.x = parav.x + ortov.x; newV.y = parav.y + ortov.y; double vlen = sqrt(newV.x*newV.x + newV.y*newV.y); ball.dir.x = newV.x/vlen; ball.dir.y = newV.y/vlen; ball.len = vlen; cx += ball.dir.x; cy += ball.dir.y;danke nochmal, hab in diesem thread einiges gelernt
