我想在代码中创建这种效果 - 在一个圆周围绘制一系列点,但是我想将圆的左右两侧的点集中在一起,并将它们进一步(均匀地)间隔开顶部和底部分开。
我觉得使用标准 sin/cos/tan 函数应该可以实现这一点,但我无法弄清楚。
这是我到目前为止创建一个圆但具有均匀分布点的伪代码:
var angleIncrement = (2 * Math.PI) / numPoints;
for (var i = 0; i < numPoints; i++) {
var angle = i * angleIncrement;
var x = centerX + radius * Math.cos(angle);
var y = centerY + radius * Math.sin(angle);
points.push(x, y);
}
您可以尝试从角度中减去两倍相同角度的正弦值的一半。这应该将角度的线性函数转换为“向上的正弦波”,其在 π 的倍数处具有零导数,并且它也与线性函数相交。像这样的东西(未经测试!):
var angleIncrement = (2 * Math.PI) / numPoints;
for (var i = 0; i < numPoints; i++) {
var linearAngle = i * angleIncrement;
var angle = linearAngle - 0.5 * Math.sin(angle * 2);
var x = centerX + radius * Math.cos(angle);
var y = centerY + radius * Math.sin(angle);
points.push(x, y);
}