Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Matter.js calculating force needed

Im trying to apply a force to an object. To get it to move in the angle that my mouseposition is generating relative to the object.

I have the angle

 targetAngle = Matter.Vector.angle(myBody.pos, mouse.position);

Now I need to apply a force, to get the body to move along that angle. What do I put in the values below for the applyForce method?

  // applyForce(body, position, force)

  Body.applyForce(myBody, {
    x : ??, y : ??
  },{
    x:??, y: ?? // how do I derive this force??
  });

What do I put in the x and y values here to get the body to move along the angle between the mouse and the body.

like image 800
Kylie Avatar asked Mar 06 '16 12:03

Kylie


2 Answers

You can rely on the Matter.Vector module and use it to substract, normalize and multiply positions vectors:

var force = 10;
var deltaVector = Matter.Vector.sub(mouse.position, myBody.position);
var normalizedDelta = Matter.Vector.normalise(deltaVector);
var forceVector = Matter.Vector.mult(normalizedDelta, force);
Body.applyForce(myBody, myBody.position, forceVector);
like image 123
Tadeo Avatar answered Oct 14 '22 23:10

Tadeo


To apply a force to move your object in that direction you need to take the sine and cosine of the angle in radians. You'll want to just pass the object's position as the first vector to not apply torque (rotation).

var targetAngle = Matter.Vector.angle(myBody.pos, mouse.position);
var force = 10;

Body.applyForce(myBody, myBody.position, {
  x: cos(targetAngle) * force, 
  y: sin(targetAngle) * force
});

Also if you need it, the docs on applyForce() are here.

(I understand this question is old, I'm more or less doing this for anyone who stumbles across it)

like image 8
brennanenanen Avatar answered Oct 14 '22 22:10

brennanenanen