brainlag: abpralllwinkel?
-
Doch, das resultiert in korrektem Verhalten. Damit wird das Einfalls == Ausfallswinkel Prinzip auf eine Spiegelung ueberfuehrt. Wenn eine Kugel kollidiert, so liegt die Ebene, an der gespiegelt wird, immer tangential an der Stelle, wo sich Kugel und Hinderniss beruehren. Diese Ebene kann daher durch den Vektor Kollisionspunkt->Mittelpunkt beschrieben werden, da dieser eine Normale der Ebene ist. Wenn du dir das mal aufmalst, sollte es recht schnell klar werden.
Weitere Fehler liegen also wo anders, z.b. ungenaue Kollisionserkennung. f'`8k
AutocogitoGruß, TGGC (making great games since 1992)
-
TGGC schrieb:
Doch, das resultiert in korrektem Verhalten. Damit wird das Einfalls == Ausfallswinkel Prinzip auf eine Spiegelung ueberfuehrt. Wenn eine Kugel kollidiert, so liegt die Ebene, an der gespiegelt wird, immer tangential an der Stelle, wo sich Kugel und Hinderniss beruehren. Diese Ebene kann daher durch den Vektor Kollisionspunkt->Mittelpunkt beschrieben werden, da dieser eine Normale der Ebene ist. Wenn du dir das mal aufmalst, sollte es recht schnell klar werden.
Weitere Fehler liegen also wo anders, z.b. ungenaue Kollisionserkennung. f'`8k
AutocogitoGruß, TGGC (making great games since 1992)
jau danke
nach gründlichem nachdenken hab ich jetzt auch alles verstanden 
hast du vielleicht ne idee, wie man erkennen kann ob ein ball liegt und ihn dann festhalten kann ? denn dadurch, dass immer die schwerkraft draufgerechnet wird, hüpft der ball immernoch ein kleines bisschen.
ich hab versucht, zu überprüfen, ob die länge des bewegungsvektors bei einer kollision einen bestimmten wert unterschreitet, das problem dabei ist aber, dass der ball ja auch z.B. beim "nach-oben-springen" eine oberfläche mit sehr geringer geschwindigkeit streifen kann und dann irrtümlicherweise festgehalten wirdedit: und toll wär auchnoch, wenn du mir nen tipp geben könntest, wie ich die "bounciness" und rutschigkeit eines objektes unabhängig voneinander verändern könnte

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