Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 计算所需的力_Javascript_Vector_Matter.js - Fatal编程技术网

Javascript 计算所需的力

Javascript 计算所需的力,javascript,vector,matter.js,Javascript,Vector,Matter.js,我试图对一个物体施加一个力。让它以鼠标位置相对于对象生成的角度移动 我有这个角度 targetAngle = Matter.Vector.angle(myBody.pos, mouse.position); 现在我需要施加一个力,使物体沿着这个角度移动。 对于applyForce方法,我应该在下面的值中输入什么 // applyForce(body, position, force) Body.applyForce(myBody, { x : ??, y : ?? },

我试图对一个物体施加一个力。让它以鼠标位置相对于对象生成的角度移动

我有这个角度

 targetAngle = Matter.Vector.angle(myBody.pos, mouse.position);
现在我需要施加一个力,使物体沿着这个角度移动。 对于applyForce方法,我应该在下面的值中输入什么

  // applyForce(body, position, force)

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

我应该在这里输入x和y值,以使身体沿着鼠标和身体之间的角度移动。

要施加力使对象朝该方向移动,需要以弧度为单位获取角度的正弦和余弦。只需将对象的位置作为第一个向量传递,即可不应用转矩(旋转)

如果需要,还可以查看
applyForce()
上的文档


(我知道这个问题已经很老了,我或多或少是为偶然发现它的人做的)

你可以依赖
Matter.Vector
模块,并使用它对位置向量进行减法、归一化和乘法:

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);

这很有帮助,但什么是旋转?难道他不想用mouseX和mouseY作为指导吗。你也错过了一些分号后180。如果这是在wiki或示例中就好了。我认为您的
theta
变量与
targetAngle
相同。因此,您可以将目标角度输入到
cosine()
sine()
函数中。θ的值是
targetAngle
转换为弧度。
targetAngle
已经是弧度了-请参阅文档,这个答案肯定比Brennananen的不太理想的(尽管正确)更可取使用三角函数(反向)将角度转换为矢量的解决方案。
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);