famo.us physics设定了独立于x-y分量的粒子速度大小

famo.us physics设定了独立于x-y分量的粒子速度大小,famo.us,Famo.us,在美国著名的物理引擎中,是否可以在不改变x/y分量的情况下设置粒子速度的大小?我希望能够设置一个球对象的速度,独立于它与其他对象的交互,其方式类似于 ball.particle.setVelocity([1,1,0]); 但只影响速度的大小 我想这个问题的一个更一般的版本是,向量可以根据大小和角度而不是x和y坐标来操作吗?向量的角度和大小是根据Famo.us中的x、y和z坐标来计算的 了解震级将有助于你。“量值”是使用坐标计算的向量的度量导数。幅值是向量的长度。你可以在卡恩学院了解震级。仅仅知

在美国著名的物理引擎中,是否可以在不改变x/y分量的情况下设置粒子速度的大小?我希望能够设置一个球对象的速度,独立于它与其他对象的交互,其方式类似于

ball.particle.setVelocity([1,1,0]);
但只影响速度的大小


我想这个问题的一个更一般的版本是,向量可以根据大小和角度而不是x和y坐标来操作吗?

向量的角度和大小是根据Famo.us中的x、y和z坐标来计算的

了解震级将有助于你。“量值”是使用坐标计算的向量的度量导数。幅值是向量的长度。你可以在卡恩学院了解震级。仅仅知道大小是无法知道向量值的

回到你想用Famo.us实现的目标

粒子群的基本解释 美国著名的粒子是基于它的速度、位置和力。所以,我们必须知道角度的矢量,才能在Famo.us中设定粒子的速度。目前还没有一种方法能够通过角度并设置速度

创建一个在美国著名的具有恒定震级的示例 设置原始向量

var脉冲=0.01; var向量=新向量1,1,0; //将最大值设置为向量的值 var maxMagnitude=向量.norm; 将力设置为粒子上的脉冲,以使其保持运动。将速度设置为最大值以控制恒定速度

注:Famo.us中粒子的大小为Particle.norm。不知道他们为什么不称之为震级

函数设定力{ //对电流矢量施加脉冲,使其保持运动状态 这个.applyImpulsethis.velocity.cappulse; //将速度设置为最大单位 this.setVelocitythis.velocity.capmaxMagnite; //返回粒子变换值 返回此.getTransform; } 来自粒子变换的变换 var physicsEngine=新physicsEngine; var粒子=新粒子{ 质量:1,, 位置:[100100,0] }; var修饰符=新修饰符; modifier.transformFromsetForce.bindparticle; var surface=新的ImageSurface{ 内容:'http://code.famo.us/assets/famous_logo.svg', 尺寸:[半径*2,半径*2], 特性:{ 边界半径:半径*2+像素 } }; physicsEngine.addBodyparticle; context.addmodifier.addsurface; //启动运动中的粒子 粒子速度[vector.x,vector.y,0];
这将允许使用标准方向以度为单位任意设置大小和方向

function setMagAndDir(particle, magnitude, angle) {
  angle = angle * (Math.PI / 180);
  var xComp = magnitude * Math.cos(angle);
  var yComp = -1 * magnitude * Math.sin(angle);
  particle.setVelocity([xComp,yComp,0]);
};
唯一的缺点是两者必须同时设置。要单独设置,请传递下面的一个getter

function readMagnitude(particle) {
  return Math.sqrt( ((particle.getVelocity()[0]) * (particle.getVelocity()[0])) + ((particle.getVelocity()[1]) * (particle.getVelocity()[1])) );
};

function readDirection(particle) {
  var direction = Math.atan2((-1 * particle.getVelocity()[1]),particle.getVelocity()[0]);
  direction = direction * (180 / Math.PI);
  if (particle.getVelocity()[1] > 0) {
    direction = direction + 360;
  }
  return direction;
};

我不确定我是否理解你的问题。粒子的速度是由三个分量组成的矢量。如果要在不改变角度的情况下增加/减少速度,只需将向量的所有分量乘以相等的值即可。我想直接将“幅值”设置为常量。@ljzerenHein正确地说明了如何在向量上增加或减少速度,因为乘法会增加幅值。从我下面的回答中可以看出,保持恒定的幅度需要更多的努力。