DEV Community

fakelaboratory
fakelaboratory

Posted on • Edited on

Physics: Newton's Laws of motion

Physics

  1. Force of gravity = mass * gravity acceleration
  2. Force of slide = force(gravity)*cos(plane angle)
  3. Force of friction(opposite to slide) = friction coefficient *force(gravity) * sin(plane angle)

Image description

Additional force(custom push) from top of view:
Image description

//horizontal application(from top of view) of setted in ui the force
cube.force_x = force.magnitude*Math.cos(Math.PI*force.angle/180+Math.PI)*-1;
cube.force_result = cube.force_slide + cube.force_friction + cube.force_x; 
cube.acceleration_x = cube.force_result/ cube.mass; // from F = m*a
cube.init_velocity_x = 0; // set start point

//vertical(from top of view) application of setted in ui the force
cube.force_y = force.magnitude*Math.sin(Math.PI*force.angle/180);
cube.acceleration_y = cube.force_y/ cube.mass; // from F = m*a
cube.init_velocity_y = 0; // set start point
Enter fullscreen mode Exit fullscreen mode

Start the simuluation by moving with the initial speed equal to zero, then with Δd=V(init)*time + (1/2)*acceleration*time^2 move points to delta and increase the init speed through acceleration.
The time is frame iteration, 1000/24, for example.


Code

Idea:
Image description
Sketch of UI:
Image description
Real screenshot:
Image description
Structure:
Image description

  • objects_render is for buffers, program, shaders of WebGL
  • glmjs are helping files, glmjs library(matrix operations) and helper file, where code for rotate object, move by glmjs.
  • objects_logic files of plane, cube, time, force...
plane {
   vertices; //array positions, colors
   angle; //degree
   inclane(angle) {
      //inclane plane and cube
      cube.inclane()
   } 
}
cube {
   vertices;
   mass; //kg
   build_physics(); //calculate forces and accelerations 
   inclane(); //also
}
force {
   vertices; //vizualiation, blue line
   angle; //degree
   magnitude; //newton
   inclane();
}  
time {
   //some coefficients and iter of time
}
Enter fullscreen mode Exit fullscreen mode

for example plane object:
Image description
As possible to see in the screenshot this simulation is using additional arrays for vertices, in example of the plane it is just a "backup" of original vertices, but for the cube: more easy just move cube in x,y(top of view),store this position and render it in another array with x,y + inclane...

Tried to test with real physics(I mean in the room with paper and matches) looks the similar. Also I added acceleration coefficient for "slow motion" because all happening so fast. But it is my philosophy interpretations...

Code here:
https://github.com/fakelaboratory/publish/tree/main/Newton's%20laws%20of%20motion
Test through browser:
https://fakelaboratory.github.io/publish/Newton's laws of motion/

Sentry blog image

How I fixed 20 seconds of lag for every user in just 20 minutes.

Our AI agent was running 10-20 seconds slower than it should, impacting both our own developers and our early adopters. See how I used Sentry Profiling to fix it in record time.

Read more

Top comments (1)

Collapse
 
fakelaboratory profile image
fakelaboratory • Edited

Also have some idea about using the data in experiments:
play only one "preexperiment" with storing the data(time, what changing by time in each frame, frame like a matrices), then replay experiments with this stored data but with correction by coefficients...

For example we have a data about the angle 30 and the force 4 - without recalc of physics(by formulas), achieve new experiment but with "training" "restore" from data

px, py - positions
ax, ay - accelerations
*store them in the data(frames)

1 frame: px, py, ax, ay
2 frame: px, py, ax, ay
...
n   frame: px,    py,    ax,    ay
           k1*px, k2*py, k3*ax, k4*ay
n+1 frame: k1*px, k2*py, k3*ax, k4*ay
n+2 frame: k1*px, k2*py, k3*ax, k4*ay
...
m   frame: l1*k1*px, l1*k2*py, l1*k3*ax, l1*k4*ay
m+1 frame: l1*k1*px, l1*k2*py, l1*k3*ax, l1*k4*ay
...
Enter fullscreen mode Exit fullscreen mode

Add to n frame k1, k2, k3, k4(and for all next frames);
Add to m frame l1, l2, l3, l4(and for all next frames);
Then replay from data...

I mean maybe someone interested to connect AI to physics.

nextjs tutorial video

Youtube Tutorial Series 📺

So you built a Next.js app, but you need a clear view of the entire operation flow to be able to identify performance bottlenecks before you launch. But how do you get started? Get the essentials on tracing for Next.js from @nikolovlazar in this video series 👀

Watch the Youtube series

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay