想象一个圆圈。想象一个馅饼。想象一下,试图返回一个布尔值,该布尔值确定所提供的 X、Y 参数是否包含在其中一个饼图中。
我对弧线的了解:
我有 CenterX、CenterY、半径、StartingAngle、EndingAngle、StartingPoint(圆周上的点)、EndingPoint(圆周上的点)。
给定 X,Y 坐标,我想确定该坐标是否包含在饼图幻灯片中的任何位置。
想象一个圆圈。想象一个馅饼。想象一下,试图返回一个布尔值,该布尔值确定所提供的 X、Y 参数是否包含在其中一个饼图中。
我对弧线的了解:
我有 CenterX、CenterY、半径、StartingAngle、EndingAngle、StartingPoint(圆周上的点)、EndingPoint(圆周上的点)。
给定 X,Y 坐标,我想确定该坐标是否包含在饼图幻灯片中的任何位置。
查看:
你会得到你的答案。
使用以下方法将 X,Y 转换为极坐标:
角度 = arctan(y/x); 半径 = sqrt(x * x + y * y);
那么 Angle 必须在 StartingAngle 和 EndingAngle 之间,Radius 必须在 0 和您的 Radius 之间。
我知道这个问题很老,但没有一个答案考虑圆弧在圆上的位置。
该算法认为所有角度都在 0 到 360 之间,并且弧线沿数学正方向(逆时针方向)绘制
首先,您可以转换为极坐标:半径 (R) 和角度 (A)。注意:如果可用,请使用 Atan2 功能。维基
R = sqrt ((X - CenterX)^2 + (Y - CenterY)^2)
A = atan2 (Y - CenterY, X - CenterX)
现在,如果 R < Radius,则该点在圆内。
要检查角度是否在 StartingAngle (S) 和 EndingAngle (E) 之间,您需要考虑两种可能性:
1) 如果 S < E 那么如果 S < A < E 该点位于切片内
2) 如果 S > E 那么有两种可能的情况
那么该点位于切片内
那么该点位于切片内
在所有其他情况下,该点位于切片之外。
在与起始角度和结束角度进行比较之前,您必须将 atan2() 转换为 0-360。
(A > 0 ? A : (2 PI + A)) * 360 / (2 PI)