javascript - 计算末端旋转圆

标签 javascript math trigonometry

我有一个圆,通过在一个循环中操纵半径来扩大和缩小。 在扩大和缩小的同时,我在那个圆圈上画了一个点。在同一个循环中,增加下一个点的 Angular 。

设置是这样的:

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

控制台记录圆和线的当前旋转。

最佳答案

当半径和点都回到起点时,一个完整的循环结束。所以

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

关于javascript - 计算末端旋转圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39654523/

相关文章:

javascript - 如何移除侧边栏并将面板置于中心

c++ - 计算两个数字之间差异的最短方法?

java - 如何舍入到下一个整数?

javascript - 坐标三 Angular 学 - 计算飞行路径弧线的中点

javascript - 使用 AngularJS $http.get 方法传递数据

javascript - 将 Rails 后端添加到 JS/HTML/CSS 应用程序时,正确的文件位置是什么?

Python 数学模块毕业

trigonometry - 如何在MS-Access中执行三角函数Arc Cos(Excel中的ACOS())?

javascript - 自动调整文本区域宽度(列)?

Java 的 BigInteger 类