MSPhysics tests and questions
-
Well we are both struggling, blind leading the blind
FYI this timer thing is fundamental to simulating physical systems (mass speed acceleration)
The on touch is a good start, just need to time the sequence and display result on reset
opens up a whole new way of simulating mechanical systems
as fundamental say as a thermometer is to tell you the temperature - if you see my point
so I must perservere. If I get a result I will post it you
Cheers
Robin
-
A bing moment has occured
when I # out the reset line, I just had a ontouch line only and it outputs to screen what might be some sort of final velocity m/s on impact (according to the script info)
pls see model
Now I cant yet correlate that to the calc velocity which should be 14m/s on impact from 10m
it comes out at 58 and varies with the UI sim setting of Newton update rate (currently 10)also from dropping from 5m gives 33 (should be 9.9m/s and is 1/sqr2 - .707) whereas 33/58 is ca.57
maybe some dynamic friction in play?
Is this a worthwhile line of enquiry?
Cheers
Robin
ps the ball is in anton's examples funny little thing - and something for gamers pool table maybe?
-
Yes, the final velocity should be 14 m/s, and it is 14 m/s.
Your script in the model you posted, just outputs the frame:
onTouch { |toucher, position, normal, force, speed| simulation.log_line("onTouch #{frame}") }
That explains why you get unrelated results.
To output the final velocity, you should change the code to output the speed:
onTouch { |toucher, position, normal, force, speed| simulation.log_line("onTouch #{speed}") }
And besides, setting the linear damping of the falling box to zero will make the final velocity even more right because this will eliminate the dissipative force.
-
Thank you so much Anton, I was just about to post an apology for a stoopid boy Pike moment (no smilie for Duh )
but I read the second line and it outputs frame to screen, what a numpty
You gave me some other scrip that outputs velocity, strange to note that the cube reaches a terminal velocity ca 2m/s ca halfway down - intriguing. Is there something in there that simulates viscosity?
onUpdate {
Get current velocity
cv = this.get_velocity
Output it in the note
note = sprintf("Velocity: (%.3f, %.3f, %.3f)", cv.x, cv.y, cv.z)
simulation.display_note(note)
}Cheers
Robin
-
Yes, the viscosity is simulated by the linear damping. To remove the linear damping, select the desired group, open MSPhysics UI, activate the Properties tab, and set Linear Damping to 0.00. This should alter the height of terminal velocity.
If you meant something else, like water or buoyancy, you can add a buoyancy plane by navigating to (Menu)Extensions->MSPhysics->Create Buoyancy Plane. Although the liquid is not simulated. It's just the buoyancy force that is applied.
-
Hi Anton
Just when I thought you cracked it with speed, something strange happens
When dropping the block from 10m = ok = 14m/s as per calc (see model)
Move the block down to 5m => nonesense answer like 0.07... (should be 9.9m/s)
Yet move block to other elevations like 8.5m or 2.5m , seems to work ok (but I haven't checked the result against calcs (12.9, 7)
So I am completely stumped
BTW sometimes the block appears to penetrate the baseplate and slowly return to zero, could this be the reason?
Thats ruined my day
Cheers
Robin
-
Maybe uncovered a nasty bug? Anton
Here's a suggestion from your speed indicator
onUpdate {
Get current velocity
cv = this.get_velocity
Output it in the note
note = sprintf("Velocity: (%.3f)", cv.z)
simulation.display_note(note)
}When it runs, on collision it displays 0.00 as expected, the block has stopped but we lost the terminal velocity
Could we say put an IF loop in the output velocity to note, only iff velocity <say .5m/s, then it should go to zero when the block stops (assuming no bounce)
Just a thought, maybe a simpler approach? from a ruby newby
Cheers
Robin
-
Sorry, Im getting tired
I meant it should retain the highest last value in note when the block stops
Apologies
Robin
-
It's all cool
Here is the code for viewing maximum velocity.
onStart { @max_vz = 0 } onUpdate { v = this.get_velocity if v.z.abs > @max_vz @max_vz = v.z.abs simulation.display_note(sprintf("Max Speed %.3f m/s", @max_vz)) end }
And yes, the speed indicator in onTouch may not always work right, which is the problem of the physics engine that my wrapper is using.
-
Hi Anton
Installed your script, works a treat and pretty accurate
However I have meddled and got stuck, I cant find a way to print another result on a new line, tried everything, puts, print (can't find sprintf in docs either)
As you see I want to print elapsed time as well and it works but overwrite the Max Speed result on the same line
I feel really dumb getting stuck on this trivial matter, pls help
BTW would I be right in saying that MSP script is a subset of official Ruby 2.0 and some elements like puts and print (they dont do anything on screen or riase an error)are left out?
Cheers
Robin
-
Here:
onStart { @max_vz = 0 } onUpdate { v = this.get_velocity if v.z.abs > @max_vz @max_vz = v.z.abs simulation.display_note(sprintf("Max Speed %.3f m/s\nElapsed Time; %.2f s", @max_vz, world.time)) end }
-
Anton, ooh that is nice
from little acorns, great oaks grow
So now we have a timer as well
Maybe add
add the x.y.z distance travelled
and then I can perhaps simulate a cannon firing a cannon ball at a target
and with a bit of wind and air friction, elementary gunnery for the Napoleonic War
I will of course present my models to you for the consideration of others in the interest of MSP
Cheers, many thanks
Robin
-
Hi Anton
Just seen your Turret thingy, blown away by it
30 pages of code - I might as well try and become a brain surgeon!3D Warehouse
3D Warehouse is a website of searchable, pre-made 3D models that works seamlessly with SketchUp.
(3dwarehouse.sketchup.com)
Very skilful
Robin
-
Just playing with basics,
brought me to some questions:When you at the screws,
-one is static mesh and is collision shape fits perfectly.- to achieve the same collision shape for the mobil oneI had to it with several components.
Any reason the soft isn't able to calculate the same collision shape but not static?
To make those movements running well I used a workaround.
For rotation we have hinge, motor, servo.
For translation we have slider, piston, why not a linear motor?
For translation + rotation we have corkscrew, why not motor + linear motor , servo + piston, servo + linear motor , linear motor + piston?
For curve we have curvy slider and curvy piston, why not a curvy motor and curvy piston?Nota bene: just curiosity here, no request.
-
At last
Terminal velocity
Time
DistanceNow the basis of my cannon project
Anton has made a sophisticated urret thingy available on 3D warehouse/msphysics
but I want to make a simpler model for a gunner with inputs for
horiz angle
Azimuth
muzzle velocity
Range (from a range finder measurement of a distant target placed at random)
Air density (from Bar pres, RH and temp)
Air friction ?output > distance landed from target (eg a forward spotter)
Simplistic stuff for a Napoleonic gunnery officer
Maybe a moving target next (eg tank)
On the 7th day god made Robin
-
Hi Anton, after extensive tests with the fairly complex ice stage model, I can report that everything works very well.
I just had to reverse some curves and exchange the programmed Curvy Piston Joint for the Orca. The calculation of the transformed emitter objects seems to work more precisely.
This costs a little more time for the simulation, but the viewport problems no longer occur.
That's great! Thank you very much!
I have extended the simulation around a rain with middle large hailstones and it works.
And for the future the integration of the good old SketchyPhysics fracture/split function and a kind of soft or flexible surfaces would be great...
-
Thanks for testing and verifying, Faust. Next feature would be to improve performance of export to Skindigo and Kerkythea. I think there is a way to reduce export redundancy. The fracture thingy would be implemented too.
-
Sounds good!
-
Testing MSPhysics in SketchUp 2017.
In a direct comparison between SketchUp Make 2016 and 2017, this incomplete image is created in 2017 when using the following script:Sketchup.active_model.active_view.write_image("e;/MSPh_Temp/frame_%06d.png" % frame,1600,900,true,1.0)
How should it be right for SUp 2017?
-
(learning Ruby for MSphysics)
I would like to move several objects, each one following an (x,y,z) curve, in a synchronous manner.
I imagined to have a public tick and then on tick each body compute its next (x,y,z) position and goes there using set_velocity([vx,vy,vz]).- is this a correct way to use MSphysics scripts? Are there (close) examples in warehouse?
- how to write if for, say, a cube moving at 1m/s from x=0 to x=100m then when x=100 --> x=0 and loop?
Thank you for your help.
Advertisement