[XNA] Berekenen velocity na collision

Pagina: 1
Acties:

  • CR35
  • Registratie: November 2005
  • Laatst online: 18-11 11:07
Hallo,

Ik zit nu al een tijd met het volgende probleem. Ik wil ronde objecten laten botsen en afkaatsen. Ik heb het hele internet al afgezocht, maar vroeg mij eigenlijk af of er iemand met meer expertise op dit gebied is.

Ik heb een interface genaamd IPhysicalObject die heeft de volgende properties

Vector2 Position
Vector2 Velocity
float Weight

void Applyforce(Vector2 force) // voegt de kracht toe aan de huidige bewegingssnelheid.

De velocity staat voor de snelheid en hoek waarmee het beweegt.

Als er een botsing ontsaat wil ik eigelijk dat de twee objecten van elkaar af reflecteren en de andere kant op gaan.

Nu dacht ik eigenlijk dus de lijn te berekenen tussen de twee objecten en daar eigenlijk weer de genormaliseerde lijn te berekenen die daar haaks op staat. En vervolgens de velocity van de objecten op die lijn te laten reflecten. Echter krijg ik dit al niet voor elkaar en zou ik eigenlijk ook nog de kracht van het andere object en gewicht willen laten meewegen. Echter wil ik dus eerst tussen de twee objecten een fictieve muur neerzetten en ze daarop te laten reflecten.

Iemand een idee hoe ik dit zou kunnen berekenen en iemand die misschien meer van de Vector2 klasse afweet.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 18-11 08:25

Janoz

Moderator Devschuur®

!litemod

Om het nog iets moeilijker te maken kan ik je vertellen dat er nog een variabele is, dat is namelijk elastische botsingen vs inelastische botsingen, maar gezien je omschrijving gaat het vooral over de eerste category.

Om meer informatie over dit onderwerp uit te zoeken kun je het beste op impuls of momentum zoeken. De eerste is de nederlandse term terwijl de tweede de engelse term is voor de combinatie richtingsvector met een gewicht. Ook over het botsen van dergelijke objecten is veel te vinden.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • ocdaan
  • Registratie: Augustus 2001
  • Laatst online: 14-11 13:41

ocdaan

Niet zo zeuren jongens!

Ik weet niet als je er wat aan hebt maar had je de volgende al gevonden?

http://www.gamasutra.com/...20118/vandenhuevel_03.htm

  • CR35
  • Registratie: November 2005
  • Laatst online: 18-11 11:07
@janoz
Ja ik zag al wat over elastisch en niet elastisch wat is daar het vershil eigenlijk tussen? En bedankt ik ga daar even op zoeken! Tijd geleden dat ik met krachten heb gewerkt.

@OCdaan

Ik had al wat over gevonden op die website volgens mij maar deze volgens mij niet. Ik ga hem bekijken.
Edit: De algoritme die daar wordt geimplementeerd heb ik al geimplementeerd alleen zonder succes... :P, volgens mij is deze wat duidelijker dus ik ga er nog even naar kijken.

[ Voor 22% gewijzigd door CR35 op 27-05-2008 13:29 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
CR35 schreef op dinsdag 27 mei 2008 @ 13:26:
@janoz
Ja ik zag al wat over elastisch en niet elastisch wat is daar het vershil eigenlijk tussen? En bedankt ik ga daar even op zoeken! Tijd geleden dat ik met krachten heb gewerkt.
Stel je voor: 2 (keiharde) biljartballen die op elkaar kletsen of 2 tennisballen; er is een verschil in hoe ze zullen reageren.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 18-11 08:25

Janoz

Moderator Devschuur®

!litemod

Tussen biljartballen en tennisballen zit niet zo heel veel verschil (behalve dat de tennisbal meer energie absorbeert). Het verschil tussen elastisch en inelastisch is meer het verschil tussen botsende biljartballen aan de ene kant en botsende hompen klei aan de andere kant.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • CR35
  • Registratie: November 2005
  • Laatst online: 18-11 11:07
Janoz schreef op dinsdag 27 mei 2008 @ 13:30:
Tussen biljartballen en tennisballen zit niet zo heel veel verschil (behalve dat de tennisbal meer energie absorbeert). Het verschil tussen elastisch en inelastisch is meer het verschil tussen botsende biljartballen aan de ene kant en botsende hompen klei aan de andere kant.
Absorbeert hij de energie wel is, het niet zo dat hij juist minder energie afgeeft? Het indeuken van de bal waar de energie min of meer wordt opgeslagen.

Ik speculeer maar wat hoor :P

  • ocdaan
  • Registratie: Augustus 2001
  • Laatst online: 14-11 13:41

ocdaan

Niet zo zeuren jongens!


  • wiene
  • Registratie: Maart 2007
  • Laatst online: 16-11 11:09
Om het nog moeilijker te maken kun je ook nog de materiaal keuze meenemen evt ook nog van ondergrond. Een biljartbal zal een lagere rolweerstand hebben als een tennisbal. Deze zal dan op gelijke ondergrond ook langer doorrollen. Dit is overigens niet zo heel moeilijk te programmeren itt kaatsen.

Ik weet alleen niet of er wel een ondergrond is en of dat het van belang is.

[ Voor 11% gewijzigd door wiene op 27-05-2008 13:39 ]


  • CR35
  • Registratie: November 2005
  • Laatst online: 18-11 11:07
wiene schreef op dinsdag 27 mei 2008 @ 13:38:
Om het nog moeilijker te maken kun je ook nog de materiaal keuze meenemen evt ook nog van ondergrond. Een biljartbal zal een lagere rolweerstand hebben als een tennisbal. Deze zal dan op gelijke ondergrond ook langer doorrollen. Dit is overigens niet zo heel moeilijk te programmeren itt kaatsen.

Ik weet alleen niet of er wel een ondergrond is en of dat het van belang is.
Tijdens de update methode van het object al een afremmende factor mee, de frictie die hij ondervind. Die zou ik eventueel dus afhankelijk van de positie kunnen ophalen. Materiaal soort is inderdaad wel een leuk idee om te implementeren. Ik ben trouwens voor een projectje bezig om een basis engine te schrijven. Hiervoor bouw ik nu een soort astroids om te testen. De uiteindelijke spelletjes zijn nog veel simpeler.

In ieder geval al bedankt voor de ideeën, ik post mijn vorderingen op dit vlak hier nog wel.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 18-11 08:25

Janoz

Moderator Devschuur®

!litemod

CR35 schreef op dinsdag 27 mei 2008 @ 13:33:
[...]


Absorbeert hij de energie wel is, het niet zo dat hij juist minder energie afgeeft? Het indeuken van de bal waar de energie min of meer wordt opgeslagen.

Ik speculeer maar wat hoor :P
Een tennisbal botsing is wel wat elastisch. Dat is te zien doordat een stuiterende tennisbal op een gegeven moment minder hoog wordt (en hij na flink stuiteren wat warmer geworden is). Hij absorbeert kinetische energie en zet een klein deel om in warmte.

Echter, om goed het verschil tussen elastisch en inelastisch aan te geven is het hompen klei voorbeeld beter. Bij een volledig elastische botsing zullen de beide objecten samen verder gaan met de gemiddelde impuls van de beide oorspronkelijke impulsen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ik nam de tennisbal juist omdat die stuitert i.t.t. een biljartbal. Een homp klei zal waarschijnlijk gewoon 'stoppen' (min of meer) en 'samenklonten' en 'vervormen' met een eventuele andere homp klei. Dat is, lijkt mij, weer een heel andere tak van de sport.

Of ik begrijp het gewoon niet :P :+

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 18-11 08:25

Janoz

Moderator Devschuur®

!litemod

Je begrijpt het niet :P. Laat maar eens een biljartbal vallen op een stevige tegelvloer. Die blijft langer stuiteren dan een tennisbal. Vandaar dat een tennisbal meer 'klei' is dan dat een biljartbal is.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Janoz schreef op dinsdag 27 mei 2008 @ 14:14:
Je begrijpt het niet :P. Laat maar eens een biljartbal vallen op een stevige tegelvloer. Die blijft langer stuiteren dan een tennisbal. Vandaar dat een tennisbal meer 'klei' is dan dat een biljartbal is.
|:( Goeiemorgen :P Idd :X :+ :D
Ik zat denk ik even ergens anders met mijn gedachten, maar we bedoelen hetzelfde :X

[ Voor 11% gewijzigd door RobIII op 27-05-2008 14:23 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • CR35
  • Registratie: November 2005
  • Laatst online: 18-11 11:07
Ik heb het nu min of meer werken :D . ze blijven nu soms alleen aan elkaar plakken. Het is met een algoritme die ik al eerder heb gezien alleen bij de link van ocdaan mooi begrijpbaar is geimplementeerd. Ik denk dat ik dat plakken oplos om na de collision met genormaliseerde vectoren de 2 objecten uitelkaar druk(dus met stapjes van 1) wanneer er geen collision meer plaatsvind dat er mee stoppen.

edit: alleen doordat er gewicht aan zit reageren de astroiden niet meer als er een laser tegen aan komt(laser heeft veel velocity weinig mass :P (logisch dus :P) andere soorten projectielen heb ik nog niet geimplementeerd.

ocdaan en alle anderen nog bedankt :P Ook alle andere voor de informatie.

[ Voor 28% gewijzigd door CR35 op 27-05-2008 15:19 ]


  • CR35
  • Registratie: November 2005
  • Laatst online: 18-11 11:07
Ok het sticken heb ik opgelost door te kijken of de objecten naar elkaar toebewegen, als dat niet het geval zullen ze ook niet colliden. Echter kan ik nog steeds als ik heel rustig gas geef "door" een astroid heen vliegen(echter ga ik nog in gameplay ervoor zorgen dat je dat niet overleefd :P). Maar ik denk dat dit te maken heeft met het punt dat een astroid zwaarder is als me schip en dat de astroid dus langzamer op gang komt als me schip.

Misschien vind ik daar nog wat op. Nu eerst bezig met andere collisions. Ik post de code hier ook nog wel eerst wat opruimen. Voor elke regel code staan er 3 uitgecomment :P.

  • pkuppens
  • Registratie: Juni 2007
  • Laatst online: 17-11 23:50
CR35 schreef op dinsdag 27 mei 2008 @ 13:02:
Hallo,

Ik zit nu al een tijd met het volgende probleem. Ik wil ronde objecten laten botsen en afkaatsen. Ik heb het hele internet al afgezocht, maar vroeg mij eigenlijk af of er iemand met meer expertise op dit gebied is.

Ik heb een interface genaamd IPhysicalObject die heeft de volgende properties

Vector2 Position
Vector2 Velocity
float Weight

void Applyforce(Vector2 force) // voegt de kracht toe aan de huidige bewegingssnelheid.

De velocity staat voor de snelheid en hoek waarmee het beweegt.

Als er een botsing ontsaat wil ik eigelijk dat de twee objecten van elkaar af reflecteren en de andere kant op gaan.

Nu dacht ik eigenlijk dus de lijn te berekenen tussen de twee objecten en daar eigenlijk weer de genormaliseerde lijn te berekenen die daar haaks op staat. En vervolgens de velocity van de objecten op die lijn te laten reflecten. Echter krijg ik dit al niet voor elkaar en zou ik eigenlijk ook nog de kracht van het andere object en gewicht willen laten meewegen. Echter wil ik dus eerst tussen de twee objecten een fictieve muur neerzetten en ze daarop te laten reflecten.

Iemand een idee hoe ik dit zou kunnen berekenen en iemand die misschien meer van de Vector2 klasse afweet.
Hier staat alles wat je wil weten en veel meer:
http://www.euclideanspace.../collision/twod/index.htm

Je kunt het zo gek maken als je wilt, draaiende piramides van klei met stalen kegels laten botsen.

PS. Alleen kijken als je het niet erg vindt dat je probleem alleen maar moeilijker wordt ;)

  • CR35
  • Registratie: November 2005
  • Laatst online: 18-11 11:07
Bedankt voor die link. Ik had al wel een pagina gevonden met formules alleen hier staan ook plaatjes en code samples bij. Maakt het allemaal wat begrijpbaarder zo te zien.

Ik ga trouwens het physics gedeelte niet veel uitbreiden. Alleen nog de rectangle to rectangle collision en rectangle to circle collision verbeteren, maar daar moet nog aardig wat aan gedaan worden.

bedankt voor de tip.
Pagina: 1