在指定的时间内围绕一个圆旋转对象
Rotate object around a circle within the specified time
我有一个函数,可以绕一个圆旋转一个对象。我将绕圆圈的时间设置为10000毫秒。
但是这个物体不会在那么长的时间内旋转,它看起来要快得多。我不确定如何纠正这一点。
我的更新函数设置对象的x,y位置,如下所示:
var obj = [];
var t = {};
var angle = Math.random()*Math.PI*2; //start angle
t.radius = 200;
t.x = Math.cos(angle)*t.radius; //start position x
t.y = Math.sin(angle)*t.radius; //start position y
t.circumference= t.radius * 2 * Math.PI;//circumference
t.duration = 10000; //10 seconds per rotation
t.start = Date.now();
obj.push(t);
function update(){
var delta,vector,angle;
for(var i = 0; i < obj.length; i++){
delta = Date.now() - obj[i].start;
obj.start = Date.now();
vector = obj[i].circumference / obj[i].duration;
angle = vector * delta;
obj[i].x = obj[i].radius * Math.cos(angle * Math.PI/180);
obj[i].y = obj[i].radius * Math.sin(angle * Math.PI/180);
}
}
function draw(){
update();
// draw my object etc
requestAnimationFrame(draw);
}
draw();
我还将此处运行的动画设置为10000毫秒,但它的旋转速度远快于此:http://jsfiddle.net/7geez8bf/
所以,我想知道如何纠正这一点,使其在我声明的时间长度内旋转?
您的angle
实际上仍然是周长(长度/时间*时间)的一部分,而不是角度。
如果你用你的半径归一化它,它就会变成一个以弧度为单位的角度,所以你不再需要在Math.cos和Math.sin中进行度数到弧度的转换。
演示:http://jsfiddle.net/7geez8bf/2/
请注意,您可以通过直接记住矢量值(以弧度/毫秒为单位的角度的一部分)来轻松地分解代码。然后它变为转速,单位为弧度每毫秒:t.rotSpeed = 2 * Math.PI / t.duration);
结果:http://jsfiddle.net/7geez8bf/3/
您的代码中存在各种不一致。例如,混合弧度和度数。角度位置不应取决于周长(因为您设置的是一个完整圆的持续时间,而不是速度)。这是更新后的代码:
for(var i = 0; i < obj.length; i++){
var delta = Date.now() - obj[i].start;
obj[i].start = Date.now();
obj[i].angle += 2 * Math.PI * delta / obj[i].duration;
obj[i].x = obj[i].radius * Math.cos(obj[i].angle);
obj[i].y = obj[i].radius * Math.sin(obj[i].angle);
}
相关文章:
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 对一个对象使用reduce可以返回一个没有't在数组中包含目标字母
- AngularJS&JSON-从Previous&下一个对象
- jQuery$.inArray()总是返回-1和一个对象数组
- javascript处理一个对象数组以获得一个新的对象数组
- javascript函数,它接受两个输入:一个对象和一个键,并返回对象中该键的相应值
- 你能用来自数组的属性名称生成一个对象吗
- 预期响应包含一个对象,但在angular js中得到一个数组错误
- Protractor:element.getText()返回一个对象,而不是String
- 如何使用jQuery添加另一个对象的高度作为边距
- 计算从一个对象到另一个对象的路径并沿其移动
- 如何将一个对象添加到每个对象数组中
- 为了避免创建全局变量,可以将所有变量分配给一个对象吗
- 将javascript对象(属性+值)合并到一个对象中
- 尝试简化检查对象键是否为true并将其推送到另一个对象
- 从 javascript 中的对象方法返回一个对象
- 响应应包含一个对象,但得到的却是GET操作的数组
- js:如何制作一个循环,将20个不同的东西添加到一个对象中
- 用javascript创建另一个对象的实例