想象一个圆。想象一块馅饼。想象尝试返回一个bool值,确定X,Y提供的参数是否包含在其中一个馅饼块中。
关于弧的了解:
我知道CenterX,CenterY,Radius,StartingAngle,EndingAngle,StartingPoint(圆周上的点),EndingPoint(圆周上的点)。
给定一个坐标X,Y,我想确定这个坐标是否在馅饼图形内。
想象一个圆。想象一块馅饼。想象尝试返回一个bool值,确定X,Y提供的参数是否包含在其中一个馅饼块中。
关于弧的了解:
我知道CenterX,CenterY,Radius,StartingAngle,EndingAngle,StartingPoint(圆周上的点),EndingPoint(圆周上的点)。
给定一个坐标X,Y,我想确定这个坐标是否在馅饼图形内。
检查:
这样就能得到您要的答案了。
我知道这个问题很旧,但是没有一个答案考虑到了弧在圆上的位置。
该算法认为所有角度都在0到360之间,并且弧朝正数数学方向绘制(逆时针)
首先,您可以转换为极坐标:半径(R)和角度(A)。注意:如果可用,请使用Atan2函数。wiki
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,则有两种可能的情况
则该点位于切片内
则该点位于切片内
在所有其他情况下,该点位于切片之外。
使用以下公式将X,Y转换为极坐标:
角度 = arctan(y/x); 半径 = sqrt(x * x + y * y);
然后,角度必须在起始角度和结束角度之间,半径必须在0和您的半径之间。
(x*x+y*y)<=r*r
代替Radius = sqrt(x * x + y * y);
- timekeeper在与起始角度和结束角度进行比较之前,您必须将atan2()转换为0-360。
(A> 0?A:(2 PI + A))* 360 /(2 PI)