在JavaScript中将圆的坐标添加到数组的最佳方法是什么?到目前为止,我只能做半圈,但我需要一个公式,将整个圆圈返回到两个不同的数组:xValues
和yValues
.(我正在尝试获取坐标,以便我可以沿路径设置对象的动画.)
这是我到目前为止所拥有的:
circle: function(radius, steps, centerX, centerY){ var xValues = [centerX]; var yValues = [centerY]; for (var i = 1; i < steps; i++) { xValues[i] = (centerX + radius * Math.cos(Math.PI * i / steps-Math.PI/2)); yValues[i] = (centerY + radius * Math.sin(Math.PI * i / steps-Math.PI/2)); } }
Ates Goral.. 22
你的循环应该像这样设置:
for (var i = 0; i < steps; i++) { xValues[i] = (centerX + radius * Math.cos(2 * Math.PI * i / steps)); yValues[i] = (centerY + radius * Math.sin(2 * Math.PI * i / steps)); }
从0开始循环
逐步完成整个2*PI范围,而不仅仅是PI.
你不应该var xValues = [centerX]; var yValues = [centerY];
- 圆圈的中心不是它的一部分.
另外,我首先将相位计算存储在局部变量中:`var phase = 2*Math.PI*i/steps;` (3认同)
DarenW.. 7
Bresenham的算法更快.你听说它与绘制直线有关,但是有一种圆形算法的形式.
无论你是使用它还是继续进行三角计算(这些天都非常快) - 你只需要绘制圆的1/8.通过交换x,y你可以得到另一个1/8,然后是x,y和两者的负数 - 交换和未交换 - 为你提供所有其余圆圈的分数.加速8倍!
你的循环应该像这样设置:
for (var i = 0; i < steps; i++) { xValues[i] = (centerX + radius * Math.cos(2 * Math.PI * i / steps)); yValues[i] = (centerY + radius * Math.sin(2 * Math.PI * i / steps)); }
从0开始循环
逐步完成整个2*PI范围,而不仅仅是PI.
你不应该var xValues = [centerX]; var yValues = [centerY];
- 圆圈的中心不是它的一部分.
Bresenham的算法更快.你听说它与绘制直线有关,但是有一种圆形算法的形式.
无论你是使用它还是继续进行三角计算(这些天都非常快) - 你只需要绘制圆的1/8.通过交换x,y你可以得到另一个1/8,然后是x,y和两者的负数 - 交换和未交换 - 为你提供所有其余圆圈的分数.加速8倍!
更改:
Math.PI * i / steps
至:
2*Math.PI * i / steps
一个完整的圆是2pi弧度,你只需要pi弧度.