我研究了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 = xy = -x的线分布。您可以使用它们来评估每个点属于哪个季度。

如果您的点是(xy),则其相对于圆心的坐标为xRelative = x - centerXyRelative = y - centerY。然后


如果yRelative < 0Math.abs(xRelative) < -yRelative,则您的意思是第一季度(代码的南部)
如果xRelative > 0Math.abs(yRelative) < xRelative,则您的分数位于第二(东部)季度
如果yRelative > 0Math.abs(xRelative) < yRelative,则您的分数位于第三(北)季度
如果xRelative < 0Math.abs(yRelative) < -xRelative,则您的点位于第四(西)区


我留给您确定哪个点分配完全落在边界上的点。同样,如果愿意,您可以根据这些标准来实现一个小的决策树。则应比依次测试每个标准要有效。

07-25 21:11