【发布时间】:2014-02-28 13:27:06
【问题描述】:
我有一个旋转的圆圈。例如,请参见下面的图片。圆被分成不同程度的线段,在这个例子中,我将圆分成三个相等的 120 度线段。
给定一个撞击点(圆外半径上的一个点),我计算圆心和撞击点之间的度数。然后,我需要确定受影响的细分市场。
我目前的解决方案是这样的:
var circleRotation = 270;
var segments = [120, 120, 120];
function segmentAtAngle(angle) {
var sumTo = circleRotation;
for (var i = 0, l = segments.length; l > i; i++) {
if (sumTo <= angle && sumTo + segments[i] >= angle) {
// return the segment
return i;
}
sumTo += segments[i];
}
}
我的解决方案并非在所有情况下都有效,假设有 270 的大偏移量,并且在请求影响程度为 45 的段时,我目前没有提供任何错误。
注意:为 segmentAtAngle 和 circleRotation 提供的角度也永远不会是负数或大于 360。我将度数标准化为 { degrees = degrees % 360; if (degrees < 0) degrees += 360; return degrees; }
在给定偏移旋转的情况下,计算圆的命中段的正确方法是什么?
【问题讨论】:
标签: math geometry trigonometry segment