• Login
sketchucation logo sketchucation
  • Login
πŸ€‘ SketchPlus 1.3 | 44 Tools for $15 until June 20th Buy Now

MSPhysics tests and questions

Scheduled Pinned Locked Moved Plugins
104 Posts 21 Posters 44.7k Views
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • R Offline
    robint
    last edited by 21 Dec 2016, 17:13

    At last

    Terminal velocity
    Time
    Distance

    Now 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


    falling block6.skp

    As one door closes another one slams in your face

    1 Reply Last reply Reply Quote 0
    • F Offline
      faust07
      last edited by 2 Jan 2017, 19:25

      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...
      πŸ‘


      NewYear-Test_07.gif


      frame_000196.jpg

      1 Reply Last reply Reply Quote 0
      • A Offline
        Anton_S
        last edited by 10 Jan 2017, 08:23

        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.

        1 Reply Last reply Reply Quote 0
        • F Offline
          faust07
          last edited by 10 Jan 2017, 19:14

          Sounds good!

          1 Reply Last reply Reply Quote 0
          • F Offline
            faust07
            last edited by 13 Jan 2017, 23:00

            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?


            result in SUp 2016


            result in SUp 2017

            1 Reply Last reply Reply Quote 0
            • Z Offline
              ZoltanSpin
              last edited by 7 May 2017, 13:28

              (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.
              1 Reply Last reply Reply Quote 0
              • A Offline
                Anton_S
                last edited by 8 May 2017, 20:12

                Hello, Zoltan,

                Yes, you understood the concept correctly.

                For such behavior, however, a script might not be necessary. You can use a Piston or a CurvyPiston joint. When you add a Piston joint, set its position units to m, linear rate to like, 1000, and the controller to, world.time % 10. This will generate a value b/w 0 and 10 on a timescale of 10 seconds.

                Also, in case you don't know how to use joints, here is a Wiki:
                https://github.com/AntonSynytsia/MSPhysics/wiki/Using-Joints

                But if you want a special behavior that would teleport a moving object after it surpasses a scalar of a coordinate, then this is how you do it:

                onStart {
                  @max_x = 100.m
                  @start_pos = this.get_position(1)
                }
                
                onUpdate {
                  this.set_velocity(1,0,0)
                  if this.get_position(1).x > @max_x
                    this.set_position(@start_pos)
                  end
                }
                

                Paste this script into the desired moving object(s).

                Basically, this will move an object at 1 m/s along the x-axis and teleport it back to start when the objects X coordinate surpasses maximum x position.

                You can also, instead, control it by force rather than velocity:

                onStart {
                  @max_x = 100.m # in inches; the .m converts it meters to inches.
                  @start_pos = this.get_position(1)
                  @des_vel_x = 1 # in m/s
                }
                
                onUpdate {
                  # Compute the desired acceleration in m/s/s -> (des_vel - cur_vel) / timestep
                  ax = (@des_vel_x - this.get_velocity.x) / simulation.update_timestep
                  # Apply force
                  this.add_force(ax * this.mass, 0, 0)
                  # Teleport if necessart
                  if this.get_position(1).x > @max_x
                    this.set_position(@start_pos)
                  end
                }
                

                Applying forces are better than applying velocities because they don't dissipate any other forces like the force of gravity or the force of contacts. Also, if you don't want to have the object be affected by the gravity, you can, as well, add force to the z component, like 9.801 * this.mass or you can simply disable gravity for the object. Both yield the same behavior.

                But, like I said, to if you want to create moving platform that doesn't involve teleportation, you can add a Piston joint and connect it to the desired object. Then add an oscillator controller to the Piston joint, like oscillator(50)*100.

                Regards,
                Anton

                1 Reply Last reply Reply Quote 0
                • D Offline
                  DingBEN
                  last edited by 7 Jun 2017, 04:52

                  I created a floor (static mesh), and a ball and a cube both compounds
                  I tilted the floor (5)
                  ...Friction ON

                  Play:

                  • Ball rolls to the edge of the floor and stops! ?
                  • Cube does not even move

                  ...Friction OFF

                  • both roll/slide off the floor and disappear in the abyss

                  I wait for 10 15 secs,

                  • the floor's front face disappears so the inside of the floor can be seen,
                  • and from that face the floor melts away until it reaches the back right corner
                  • then it melts from the back right corner to the left one and vanishes!

                  Also if using any SketchUp commands, for example, to realign the scene
                  then the behavior of objects and mouse pointing and other function go to the abyss of absurdity

                  Hope this is helpful.

                  1 Reply Last reply Reply Quote 0
                  • F Offline
                    faust07
                    last edited by 8 Jun 2017, 11:34

                    Hi DingBEN,
                    I guess the ball stops at the edge because its shape is defined as "Compound".
                    You could test is with a collision shape "Sphere".
                    When in MSPhysics objects fall down into infinity, they gradually enlarge the overall model.
                    They are falling too far away from the camera.
                    And the "clipping" problem known in SketchUp is getting stronger until all objects are optically cut off in the field of view of the camera.
                    You can read a bit more about the "clipping" issue here:
                    http://support.google.com/sketchup/bin/ ... swer=36261

                    1 Reply Last reply Reply Quote 0
                    • C Offline
                      chad3006
                      last edited by 28 Jun 2017, 13:31

                      I posted this same question at the MSPhysics Github. I'm very new to MSPhysics and not very smart either, so I was wondering if anyone has attempted a simulated wind-tunnel or something like that using MSPhysics? Is such a thing even possible at the moment? If so could you share?

                      1 Reply Last reply Reply Quote 0
                      • A Offline
                        Anton_S
                        last edited by 28 Jun 2017, 22:33

                        Wind tests are not possible with MSPhysics. I once came across a plugin dealing with fluid analysis but can't recall the name of it.

                        1 Reply Last reply Reply Quote 0
                        • F Offline
                          faust07
                          last edited by 11 Jul 2017, 17:38

                          Here the first small test example MSPhysics v1.0.0 with scripted emitters.
                          Unfortunately, SketchUp crashes completely after a few seconds.
                          In MSPhysics v1.0.0 WIP7 there was no problem with this.
                          Thanks in advance.
                          Edit: Fixed in high Speed - now it works - thanks to Anton! πŸ‘


                          Rain-Test_SUp17-MSP100_01.skp

                          1 Reply Last reply Reply Quote 0
                          • ecatiE Offline
                            ecati
                            last edited by 13 Jul 2017, 09:19

                            To ensure smooth movement, how should the green piece connect to the blue piece?


                            soru.jpg


                            soru.skp

                            1 Reply Last reply Reply Quote 0
                            • A Offline
                              Anton_S
                              last edited by 13 Jul 2017, 20:28

                              The green piece can be grouped with the blue pieces: ungroup both of the blue pieces, hold CTRL, select the green piece, and regroup them all together.

                              For improvements you can change the collision of the yellow wheels to Cylinder shape. Also, set the solver model to iterative 16 passes and material thickness to zero.

                              The only way you will achieve a smooth ride is by relying on the CurvySlider joints and having the entire track set be ignored; relying on contacts will rarely show you good results. Here I attached your model with two CurvySlider joints lining the entire track. I also used Fredo6's Curvyvizard (http://sketchucation.com/forums/viewtopic.php?p=415495#p415495) to smooth the curvy at certain, rough locations.
                              soru.skp

                              1 Reply Last reply Reply Quote 0
                              • F Offline
                                faust07
                                last edited by 7 Aug 2017, 15:42

                                Comparison between V0.9.9 and V1.0.1(V1.0.2)

                                Have the following problems:

                                • the deep impact of small scripted emitters on heavy bodies.
                                • strong reflection of that emitted objects (non collision) on a Buoyancy Plane.
                                • continuous OnTouch events of object with a plane for "waves" and "splashes" don't work anymore.

                                Here are two files, on for SkechUp 2016 with MSPhysics v0.9.9 witch worked well and the other for SketchUp 2017 with MSPhysics v1.0.1 for witch I need help.
                                For the parallel tests I hade to install MSP v0.9.9 on SUp 2016 - sorry!
                                The GIF of V0.9.9 shows what I want to achieve.
                                Thanks in advance!


                                OnTouch-Test_05_099.gif


                                OnTouch-Test_01_MSP0.9.9_SUp2016.skp


                                OnTouch-Test_05_101.gif


                                OnTouch-Test_01_MSP1.0.1_SUp2017.skp

                                1 Reply Last reply Reply Quote 0
                                • A Offline
                                  Anton_S
                                  last edited by 8 Aug 2017, 04:28

                                  There were a few issues.

                                  In new version, onTouch is triggered only one time, whenever there is a contact between bodies. In your script you tried to use the onTouch event as a repetitive event for generating trailing waves. It did work, as a bug, in version 0.9.9 but not anymore.

                                  Another thing is setting emitted bodies non-collidable. Setting the original bodies non-collidable won't make the emitted body non-collidable. You must appply such state explicitly to the emitted body:

                                  
                                  body = simulation.emit_body(...)
                                  body.collidable = false
                                  
                                  

                                  I fixed all these issues and also made rain droplets be independent of touch event.


                                  Faust's Whale.skp

                                  1 Reply Last reply Reply Quote 0
                                  • F Offline
                                    faust07
                                    last edited by 8 Aug 2017, 09:43

                                    Hi Anton, once again thank you for the quick reply. πŸ‘
                                    This is, of course, an interesting approach and for me something new to explore again.

                                    A touch function as a repetitive event for generating something would be great. I think it was a good bug and you should bring it back as separate option. if it is possible... 😎

                                    One problem in the new solution is, that after about 700 frames the lifetime of some emitted objects doesn't end.


                                    Whale_AntonS_1150.png

                                    1 Reply Last reply Reply Quote 0
                                    • A Offline
                                      Anton_S
                                      last edited by 8 Aug 2017, 10:17

                                      Hmm... I think something is wrong in code or with MSPhysics. Try changing the rain dproplet's code to this:

                                      onStart {
                                        @instances = {}
                                      }
                                      
                                      onTick {
                                        dir = this.group.transformation.zaxis
                                        dir.length = this.mass
                                        point = this.get_position + Geom;;Vector3d.new((rand()-0.5)*1000, (rand()-0.5)*1000, (rand()-0.5)*10)
                                        tra = Geom;;Transformation.new(point)
                                        rain = simulation.emit_body(this, tra, dir, 5)
                                        rain.collidable = false
                                        @instances[rain] = true
                                        @instances.reject! { |k,v|
                                          next true unless k.valid?
                                          point = k.get_position(0)
                                          if point.z < 0
                                            #k.destroy(true)
                                            posineu = Geom;;Point3d.new(point.x, point.y, 5)
                                            tra = Geom;;Transformation.new(posineu)
                                            body = simulation.emit_body(@@splash2, tra, @@dir, 0.25)
                                            body.collidable = false
                                            if frame % 3 == 0
                                              posineu = Geom;;Point3d.new(point.x, point.y, -2)
                                              tra = Geom;;Transformation.new(posineu)
                                              body = simulation.emit_body(@@bubble2, tra, @@dir, 0.2)
                                              body.collidable = false
                                            end
                                            next true
                                          end
                                          false
                                        }
                                      }
                                      

                                      Aside from that, you can use onTouching event for repetitive action, but it only yields toucher parameter and doesn't provide touch position.

                                      1 Reply Last reply Reply Quote 0
                                      • F Offline
                                        faust07
                                        last edited by 8 Aug 2017, 12:15

                                        Without the k.destroy function it works better now. Thanks, Anton. πŸ‘
                                        Controlling the disappearance of the drops by setting the lifetime is sufficient...
                                        I have meanwhile found a way to make the marine life's bow wave smooth on the surface of the water, even if it slopes sideways.
                                        More complicated is it, when objects are jumping out of the water, when diving or with falling ice floes causing the appropriate waves and splashes, which was very easy with the good old V0.9.9 bug function.
                                        The gif-example is old, but shows what I mean.
                                        Witch toucher parameters can I use from an onTouching event to get recurring waves and splashes during prolonged movement of objects in the water?


                                        Foam_Test05.gif

                                        1 Reply Last reply Reply Quote 0
                                        • A Offline
                                          Anton_S
                                          last edited by 8 Aug 2017, 20:22

                                          You can rely on MSPhysics::Body.#contacts function. Add this code to an iceberg to see the effect:

                                          onTick {
                                            if this.get_velocity.length > 1.0 && frame % 10 == 0
                                              this.contacts(true).each { |contact|
                                                body = simulation.emit_body(@@splash4, contact.point, @@dir, 0.4)
                                                body.collidable = false
                                              }
                                            end
                                          }
                                          
                                          1 Reply Last reply Reply Quote 0
                                          • 1
                                          • 2
                                          • 3
                                          • 4
                                          • 5
                                          • 6
                                          • 4 / 6
                                          • First post
                                            Last post
                                          Buy SketchPlus
                                          Buy SUbD
                                          Buy WrapR
                                          Buy eBook
                                          Buy Modelur
                                          Buy Vertex Tools
                                          Buy SketchCuisine
                                          Buy FormFonts

                                          Advertisement