Javascript 随机速度矢量公式工作不正常

Javascript 随机速度矢量公式工作不正常,javascript,html,math,physics,Javascript,Html,Math,Physics,我正在创建一个游戏,开始时,球需要在html画布上以随机方向移动,但所有方式都具有相同的速度。我使用这个公式: phi = 2*Math.PI*Math.random(); vx = speed * Math.cos(phi); vy = speed * Math.sin(phi); 但它并没有给我一个恒定的速度。有人能纠正这个公式吗 以下是片段: var canvas=document.getElementById('canvas'); var context=canvas.getCont

我正在创建一个游戏,开始时,球需要在html画布上以随机方向移动,但所有方式都具有相同的速度。我使用这个公式:

phi = 2*Math.PI*Math.random();
vx = speed * Math.cos(phi);
vy = speed * Math.sin(phi);
但它并没有给我一个恒定的速度。有人能纠正这个公式吗

以下是片段:

var canvas=document.getElementById('canvas');
var context=canvas.getContext('2d');
设置间隔(渲染,10);
变量球={
x:250,
y:250,
vx:5*Math.cos(2*Math.PI*Math.random()),
vy:5*Math.sin(2*Math.PI*Math.random()),
r:5
}
函数render(){
clearRect(0,0,canvas.width,canvas.height);
ball.x+=ball.vx;
ball.y+=ball.vy;
context.beginPath();
弧(ball.x,ball.y,ball.r,0,2*Math.PI);
context.fillStyle='black';
context.fill();
stroke();
}
画布{
边框:1px实心;
}

Math.random
在每次调用时返回新值。您需要对角进行一次

var canvas=document.getElementById('canvas');
var context=canvas.getContext('2d');
设置间隔(渲染,10);
var phi=2*Math.PI*Math.random()//需要相同的角度
//因为sin^2(phi)+cos^2(phi)=1
变量球={
x:250,
y:250,
vx:5*数学cos(φ),
vy:5*数学罪恶(phi),
r:5
}
函数render(){
clearRect(0,0,canvas.width,canvas.height);
ball.x+=ball.vx;
ball.y+=ball.vy;
context.beginPath();
弧(ball.x,ball.y,ball.r,0,2*Math.PI);
context.fillStyle='black';
context.fill();
stroke();
}
画布{
边框:1px实心;
}

你说的
不是恒定速度是什么意思?
我的意思是,有时我希望球以恒定的速度穿过画布。它给你恒定的速度,即速度的大小。你的代码片段与函数开头的摘录显示的代码不同:你随机选择两个不同的角度
vx
vy
。使用
phi
变量(正如您在开头所写的那样),您应该注意,您所写的代码会向某个位置添加速度。单位是个问题。这样做时,您假设的是单位时间步长。如果你想改变时间步长dt,你应该写ball.x+=ball.vx*dt;