Alvaro Cassinelli
/
skinGames_forktest
just a test
Fork of scoreLight_Advanced by
classSpring.cpp@12:0de9cd2bced5, 2012-04-12 (annotated)
- Committer:
- mbedalvaro
- Date:
- Thu Apr 12 08:38:44 2012 +0000
- Revision:
- 12:0de9cd2bced5
- Parent:
- 0:345b3bc7a0ea
- Child:
- 30:d8af03f01cd4
1) template class vector works fine. This way, I have more memory (by defining a rigid scafold using unsigned shorts). I can now make an elastic blob of at least 50 points. ; ; To do: double buffering (this will again take memory, but it may be ok becaus...
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mbedalvaro | 0:345b3bc7a0ea | 1 | #include "classSpring.h" |
mbedalvaro | 0:345b3bc7a0ea | 2 | #include "myVectorClass.h" |
mbedalvaro | 0:345b3bc7a0ea | 3 | |
mbedalvaro | 0:345b3bc7a0ea | 4 | //--------------------------------------------------------------------- |
mbedalvaro | 0:345b3bc7a0ea | 5 | spring::spring(){ |
mbedalvaro | 0:345b3bc7a0ea | 6 | massA = NULL; |
mbedalvaro | 0:345b3bc7a0ea | 7 | massB = NULL; |
mbedalvaro | 0:345b3bc7a0ea | 8 | } |
mbedalvaro | 0:345b3bc7a0ea | 9 | |
mbedalvaro | 0:345b3bc7a0ea | 10 | //--------------------------------------------------------------------- |
mbedalvaro | 0:345b3bc7a0ea | 11 | void spring::update(){ |
mbedalvaro | 0:345b3bc7a0ea | 12 | if ((massA == NULL) || (massB == NULL)){ |
mbedalvaro | 0:345b3bc7a0ea | 13 | return; |
mbedalvaro | 0:345b3bc7a0ea | 14 | } |
mbedalvaro | 0:345b3bc7a0ea | 15 | |
mbedalvaro | 12:0de9cd2bced5 | 16 | vector2Df pta = massA->pos; |
mbedalvaro | 12:0de9cd2bced5 | 17 | vector2Df ptb = massB->pos; |
mbedalvaro | 0:345b3bc7a0ea | 18 | |
mbedalvaro | 0:345b3bc7a0ea | 19 | float theirDistance = (pta - ptb).length(); |
mbedalvaro | 0:345b3bc7a0ea | 20 | float springForce = (springiness * (distance - theirDistance)); |
mbedalvaro | 12:0de9cd2bced5 | 21 | vector2Df frcToAdd = (pta-ptb).normalize() * springForce; |
mbedalvaro | 0:345b3bc7a0ea | 22 | |
mbedalvaro | 0:345b3bc7a0ea | 23 | massA->addForce(frcToAdd); |
mbedalvaro | 0:345b3bc7a0ea | 24 | massB->addForce(-frcToAdd); |
mbedalvaro | 0:345b3bc7a0ea | 25 | //massA->totalForce.x+=frcToAdd.x;massA->totalForce.y+=frcToAdd.y; |
mbedalvaro | 0:345b3bc7a0ea | 26 | //massB->totalForce.x-=frcToAdd.x;massB->totalForce.y-=frcToAdd.y; |
mbedalvaro | 0:345b3bc7a0ea | 27 | } |
mbedalvaro | 0:345b3bc7a0ea | 28 | |
mbedalvaro | 0:345b3bc7a0ea | 29 | void spring::assymetricUpdate(){ // only second mass suffers a force |
mbedalvaro | 0:345b3bc7a0ea | 30 | if ((massA == NULL) || (massB == NULL)){ |
mbedalvaro | 0:345b3bc7a0ea | 31 | return; |
mbedalvaro | 0:345b3bc7a0ea | 32 | } |
mbedalvaro | 0:345b3bc7a0ea | 33 | |
mbedalvaro | 12:0de9cd2bced5 | 34 | vector2Df pta = massA->pos; |
mbedalvaro | 12:0de9cd2bced5 | 35 | vector2Df ptb = massB->pos; |
mbedalvaro | 0:345b3bc7a0ea | 36 | |
mbedalvaro | 0:345b3bc7a0ea | 37 | float theirDistance = (pta - ptb).length(); |
mbedalvaro | 0:345b3bc7a0ea | 38 | float springForce = (springiness * (distance - theirDistance)); |
mbedalvaro | 12:0de9cd2bced5 | 39 | vector2Df frcToAdd = (pta-ptb).normalize() * springForce; |
mbedalvaro | 0:345b3bc7a0ea | 40 | |
mbedalvaro | 0:345b3bc7a0ea | 41 | //massA->addForce(frcToAdd); |
mbedalvaro | 0:345b3bc7a0ea | 42 | massB->addForce(-frcToAdd); |
mbedalvaro | 0:345b3bc7a0ea | 43 | //massA->totalForce.x+=frcToAdd.x;massA->totalForce.y+=frcToAdd.y; |
mbedalvaro | 0:345b3bc7a0ea | 44 | //massB->totalForce.x-=frcToAdd.x;massB->totalForce.y-=frcToAdd.y; |
mbedalvaro | 0:345b3bc7a0ea | 45 | } |