我有一个圆圈,通过在循环中操纵半径来增长和缩小。 在成长和萎缩的同时,我在这个圈子上画了一点。并在同一个循环中,增加下一个点的角度。
设置如下:
let radius = 0;
let circleAngle = 0;
let radiusAngle = 0;
let speed = 0.02;
let radiusSpeed = 4;
let circleSpeed = 2;
在循环中:
radius = Math.cos(radiusAngle) * 100;
// creating new point for line
let pointOnCircle = {
x: midX + Math.cos(circleAngle) * radius,
y: midY + Math.sin(circleAngle) * radius
};
circleAngle += speed * circleSpeed;
radiusAngle += speed * radiusSpeed;
这会产生某种花/图案。 在未知的旋转之后,绘制线连接到它开始的点,完美地关闭路径。
现在我想知道在线回到它开始之前必须发生多少次旋转。
可以在这里找到一个工作示例: http://codepen.io/anon/pen/RGKOjP
控制台记录圆和线的当前旋转。
答案 0 :(得分:1)
当半径和点都返回到起点时,完整循环结束。所以
speed * circleSpeed * K = 360 * N
speed * radiusSpeed * K = 360 * M
这里K是未知匝数,N和M是整数。
将第一个等式除以第二个等式
circleSpeed / radiusSpeed = N / M
如果速度值是整数,则将它们除以LCM以获得最小有效N和M值,如果它们是有理数,则将它们相乘以获得整数比例。
对于你的例子,最小整数N = 1,M = 2,所以我们可以得到
K = 360 * 1 / (0.02 * 2) = 9000 loop turns