How to do physics?
BlitzMax Forums/BlitzMax Programming/How to do physics?
| ||
| Howdy, I am working on a new project, part of which will entail the need for some physics to be implemented. I haven't done very much in the way of advanced physics before. Does anyone have some suggested online reading or advice about how to do physics interactions between a number of `particles of matter`? I basically have a bunch of small `sticky` objects - they need to be able to form groups, but must also be able to break apart under the right conditions of weight/force etc. I think what I need is something to do with a large number of `deformable bodies` that can act as a single body or break up into parts. It seems from what I've been reading so far that I need to do something like the `Discrete Element Method`. Any help much appreciated. |
| ||
| search for the hitman paper on the net. 'hitman rigid body' or something like that. |
| ||
| ok thanks. anything else? |
| ||
| physics are hard. wait for the ODE module and focus on something else |
| ||
| I am finding out also that physics are indeed hard. Every single article I've read on it so far gets much too strongly into heavy maths equasions without explaining them for a novice - you have to already even know what all the symbols mean, yet alone understand what's going on. Maybe I'll have to settle for some kind of `fake` cludgey effect that sort of looks like the real thing. I just want some 2D routines that will let me throw irregularly shaped objects at each other. |
| ||
| Waiting is not an option ;-D |
| ||
| Have a look in the code archives - ages ago I posted an example of a simple rigid body physics system using particles attached to each other via spring links. It's very easy to adapt to create blobby objects that will roll around and wobble etc.., and you can make them break apart very easily by checking the forces on the springs and then breaking them at a certain limit - you can see in the demo that the springs turn red as they stretch. here's the link - http://www.blitzbasic.com/codearcs/codearcs.php?code=387 |
| ||
| I have always wanted to play around with this stuff. Thank Vorderman My Code is very basic and poor as I am really just learning to work with Bmax Regards, Eric
Strict
Graphics 1024,768
Global SpringList:TList=New TList
Global Index:Int
Global Particles:Tparticle[20]
Global DD:Int
Global EE:Int
Global SpringStrength:Float=55.15
Type Tparticle
Field Image:Timage
Field X:Float
Field Y:Float
Field XS:Float
Field YS:Float
Field Locked:Int
Function Create:TParticle(X:Int,Y:Int)
Local P:Tparticle
P:Tparticle= New TParticle
P.X=X
p.Y=Y
Return P
End Function
Function Update()
For Local Index=0 To 5
Particles[Index].YS:+.98
Particles[Index].XS:*.90
Particles[Index].YS:*.90
Particles[Index].X:+Particles[Index].XS
Particles[Index].Y:+Particles[Index].YS
If Particles[Index].Y>765 And Particles[Index].YS>0.0
Particles[Index].YS=-Particles[Index].YS*.98
Particles[Index].Y=765.0
End If
DrawOval(Particles[Index].X-3,Particles[Index].Y-3,6,6)
next
End Function
End Type
Type TSpring
Field Connection1
Field Connection2
Field Length:Float
Field CurrentLenght:Float
Field PeakTension:Float
Function Create:TSpring(C1:Int,C2:Int)
Local S:TSpring
Local DX:Float
Local DY:Float
S:TSpring= New TSpring
S.Connection1=C1
S.Connection2=C2
DX=Particles[C1].X-Particles[C2].X
DY=Particles[C1].Y-Particles[C2].Y
S.Length=Sqr((DX*DX)+(DY*DY))
ListAddLast SpringList,S
Return S
End Function
Function Update()
For Local Spring:Tspring=EachIn SpringList
Local P1=Spring.Connection1
Local P2=Spring.Connection2
Local SX:Float = Particles[P1].X-Particles[P2].X
Local SY:Float = Particles[P1].Y-Particles[P2].Y
Local Length:Float =Sqr((SX*SX)+(SY*SY))
Spring.CurrentLenght=Length
Local NormalLength:Float=Spring.Length
Local ForceScaler:Float=(Length-NormalLength)/NormalLength
SX:*(1.0/Length)
SY:*(1.0/Length)
Local FX:Float = SX*ForceScaler
Local FY:Float = SY*ForceScaler
FX:*SpringStrength
FY:*SpringStrength
Local FX2:Float=-FX
Local FY2:Float=-FY
Particles[P2].XS:+FX
Particles[P2].YS:+FY
Particles[P1].XS:-FX
Particles[P1].YS:-FY
DrawLine(Particles[Spring.Connection1].X,Particles[Spring.Connection1].Y,Particles[Spring.Connection2].X,Particles[Spring.Connection2].Y)
Next
End Function
End Type
RestoreData Parts
For Index=0 To 5
ReadData DD,EE
Particles[Index]=TParticle.Create(DD,EE )
Next
RestoreData Springs
For Index=0 To 8
ReadData DD,EE
Tspring.Create(DD,EE)
Next
Repeat
Cls
If MouseDown (1)
Local Index=5
Particles[Index].YS:+((MouseY()-Particles[Index].Y)/25)
Particles[Index].XS:+((MouseX()-Particles[Index].X)/50)
End If
Tparticle.Update()
TSpring.Update()
If KeyDown(Key_A)
SpringStrength:+.1
End If
If KeyDown(Key_Z)
SpringStrength:-.1
End If
DrawText ("Spring Tension A/Z "+SpringStrength,0,24)
DrawText ("Click the Mouse",0,36)
Flip
Until KeyHit(Key_Escape)
#Parts
DefData 500,100
DefData 600,100
DefData 600,200
DefData 500,200
DefData 550,150
DefData 550,10
#Springs
DefData 0,5,5,1,1,0,0,3,3,2,2,1,1,3,2,4,0,2
|
| ||
| cool demo Eric. |
| ||
| Nice bouncy things :-) |
| ||
| I just tweaked the code a little... It's kinda fun to play around with but I am not sure what to do with it. :) |
| ||
| It's not quite what I'm trying to do but it's neat. |
| ||
| Are you trying to do something like this? http://www.tinyminions.co.uk/teamonkey/blob1.html (You'll need Java 1.4 or greater) |
| ||
| I can't help you but maybe a book can. Check out PremierPress's collection of Physics book. It's not free I'm afraid. Nicolas. |
| ||
| teamonkey, that looks interesting but no it's not what I'm trying to do. Besides, my blobby objects are faster and better ;-) although they don't use any physics. I'm not working on blobs right now, though. I think I probably will have to work on it by myself otherwise I would have to give too much away in order to describe it properly. I'm notorious for giving everything away so I'm really trying hard to keep my project under wraps. I just hoped it might be simpler to make particles behave realistically than it appears to be. |
| ||
| if you gave a more precise idea of what you are trying to do maybe we could help you... |
| ||
| Sorry. I can't tell you. I will have to figure it out myself. Thanks for the offer. |
| ||
| Searching for things like physical particle simulation or things basing on molecular physic system would be a possibility as it seems that you want to have some kind of molecular system ... At least basing on your postings. |
| ||
| Something along those lines. That's pretty much what I'm finding. I think I will end up having to basically create my own custom engine though, with the physics designed for my specific purpose. I don't think I would be able to do a completely true-to-life simulation because there are obviously many characteristics of particulate matter that can only really be described but a much finer grained universe based on molecules and atoms etc. Too complicated. I will have to approximate. |
| ||
| i did this once: http://www.radicalrebound.com/particles.zip |
| ||
| Thanks Najdorf, I'm on a Mac here though. |
| ||
| Check this link... http://www.aidspan.org/alec/physical/overview_physics.htm Demos are win32 though, but the screenshots and the downloadable helpfile explains alot. |
| ||
| Thanks, that's actually very close to what I am wanting to do so it's very useful! I had to download a Mac CHM viewer to see the file, but it was worth it! :-) Thanks Sweenie. |
| ||
| Thanks for the wonderful code, Eric! |
| ||
| It Was fun Using Vorderman's original code... I wish I had continued.. I never thought of anything good to make with it. I'm not a good "Idea" person. Just a coder. But In any case you are welcome. :) |
| ||
| Maybe http://www.amazon.com/exec/obidos/tg/detail/-/1558607323/qid=1124740995/sr=8-1/ref=pd_bbs_1/104-3968993-5999942?v=glance&s=books&n=507846 cu olli |
| ||
| Any news angeldaniel ? :) |
| ||
| Hey, thanks for your interest! :-) Mostly at the moment I only have designs for how the engine/environment works. I've been doing a lot of research/learning into how to simulate various things, learning about springs, fluid dynamics, atomic structure, etc. I have a fairly high level understanding of how it all fits together and works to produce an overall game experience, but then I also realized what I mainly have is an engine which a person could play around in, but with no goals, no theme, no story, none of that traditional game stuff. So it's more of a simulation at the moment. But then again, that's how scorched earth started out - just as a physics simulation. So my engine is a pretty sophisticated physics simulation of a fully destructible and highly detailed environment, albeit on paper. When it came down to looking into how to actually do the programming for it, to make it a reality, I was quite put off. I used to be more of a programmer years ago but I more or less put it away in order to pursue other priorities, and now that I'm coming back to it I don't have hardly any of that interest/patience/concentration or desire to think and figure stuff out so much. I'm a bit put off by the programming. So I sort of have things on hold at the moment trying to decide whether to do any more with it. I think it would be excellent if I did do it, but it's a matter of finding time and interest to sit there and tolerate the frustrating complexities of writing programs. I wish the routines were already written for me :-) lol So that's where things are. There has been lots of progress but I'm not sure whether to take it to the next level. Each time I try to go to program it, I find myself sitting there hardly knowing where to start or how to structure it or what order to do things in. I think partly it's because I've developed a nack for considering everything all at once, which is a lot of stuff to keep in mind, which doesn't really help with getting things done. |