我研究了Google,但找不到搜索关键字。所以我在这里问我的算法和代码是否有效?
http://sketchtoy.com/66429941(算法)
算法是:我有四个点:圆的北,东,南和西。我检查了4个距离(distanceToNorth,distanceToEast,distanceToSouth,distanceToWest)。我发现他们最少,所以是四分之一。
这是代码,但对我而言似乎并不高效。
(firstQuarter是North,secondQuarter是East,依此类推。
注意:假设mousemove在圆圈内。
var firstQuarterX = centerX;
var firstQuarterY = centerY - radius;
var secondQuarterX = centerX + radius;
var secondQuarterY = centerY;
var thirdQuarterX = centerX;
var thirdQuarterY = centerY + radius;
var fourthQuarterX = centerX - radius;
var fourthQuarterY = centerY;
var distanceToFirst = Math.sqrt(Math.pow(x-firstQuarterX, 2) + Math.pow(y-firstQuarterY, 2));
var distanceToSecond = Math.sqrt(Math.pow(x-secondQuarterX, 2) + Math.pow(y-secondQuarterY, 2));
var distanceToThird = Math.sqrt(Math.pow(x-thirdQuarterX, 2) + Math.pow(y-thirdQuarterY, 2));
var distanceToFourth = Math.sqrt(Math.pow(x-fourthQuarterX, 2) + Math.pow(y-fourthQuarterY, 2));
var min = Math.min(distanceToFirst, distanceToSecond, distanceToThird, distanceToFourth);
var numbers = [distanceToFirst, distanceToSecond, distanceToThird, distanceToFourth];
var index = numbers.indexOf(min); // it will give 0 or 1 or 2 or 3
var quarter = index + 1;
最佳答案
请注意,相对于圆心的原点,您的四分之一之间的边界沿方程y = x
和y = -x
的线分布。您可以使用它们来评估每个点属于哪个季度。
如果您的点是(x
,y
),则其相对于圆心的坐标为xRelative = x - centerX
和yRelative = y - centerY
。然后
如果yRelative < 0
和Math.abs(xRelative) < -yRelative
,则您的意思是第一季度(代码的南部)
如果xRelative > 0
和Math.abs(yRelative) < xRelative
,则您的分数位于第二(东部)季度
如果yRelative > 0
和Math.abs(xRelative) < yRelative
,则您的分数位于第三(北)季度
如果xRelative < 0
和Math.abs(yRelative) < -xRelative
,则您的点位于第四(西)区
我留给您确定哪个点分配完全落在边界上的点。同样,如果愿意,您可以根据这些标准来实现一个小的决策树。则应比依次测试每个标准要有效。