如何判断一个点(X,Y)是否包含在圆的弧段内(即饼图切片)?
想象一个圆圈。想象一下一个馅饼。想象一下,尝试返回一个布尔值,该布尔值确定所提供的 X、Y 参数是否包含在这些饼图块之一中。
我对弧的了解:
我有 CenterX、CenterY、半径、StartingAngle、EndingAngle、StartingPoint(圆周上的点)、EndingPoint(圆周上的点)。
给定 X,Y 坐标,我想确定该坐标是否包含在饼图幻灯片中的任何位置。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
检查:
,你就会得到答案。
Check:
And you'll have your answer.
我知道这个问题很旧,但没有一个答案考虑圆弧在圆上的位置。
该算法认为所有角度都在0到360之间,并且以数学正方向(逆时针)绘制弧线。
首先可以转换为极坐标:半径(R)和角度(A)。注意:如果可用,请使用 Atan2 函数。 wiki
R = sqrt ((X - CenterX)^2 + (Y - CenterY)^2)
A = atan2 (Y - CenterY, X - CenterX)
现在如果 R <点在圆内的半径。
要检查角度是否在 StartingAngle (S) 和 EndingAngle (E) 之间,您需要考虑两种可能性:
1) 如果 S <如果S<E,则E A< E 该点位于切片内
2) 如果 S > E 那么有 2 种可能的情况
那么该点位于切片内
然后该点位于切片
在所有其他情况下,该点位于切片之外。
I know this question is old but none of the answers consider the placement of the arc on the circle.
This algorithm considers that all angles are between 0 and 360, and the arcs are drawn in positive mathematical direction (counter-clockwise)
First you can transform to polar coordinates: radius (R) and angle (A). Note: use Atan2 function if available. wiki
R = sqrt ((X - CenterX)^2 + (Y - CenterY)^2)
A = atan2 (Y - CenterY, X - CenterX)
Now if R < Radius the point is inside the circle.
To check if the angle is between StartingAngle (S) and EndingAngle (E) you need to consider two possibilities:
1) if S < E then if S < A < E the point lies inside the slice
2) if S > E then there are 2 possible scenarios
then the point lies inside the slice
then the point lies inside the slice
In all other cases the point lies outside the slice.
使用以下方法将 X,Y 转换为极坐标:
Angle = arctan(y/x);
半径 = sqrt(x * x + y * y);
那么角度必须在 StartingAngle 和 EndingAngle 之间,半径必须在 0 和您的半径之间。
Convert X,Y to polar coordinates using this:
Angle = arctan(y/x);
Radius = sqrt(x * x + y * y);
Then Angle must be between StartingAngle and EndingAngle, and Radius between 0 and your Radius.
在与开始和结束角度进行比较之前,您必须将 atan2() 转换为 0-360。
(A > 0 ? A : (2PI + A)) * 360 / (2PI)
You have to convert atan2() to into 0-360 before making comparisons with starting and ending angles.
(A > 0 ? A : (2PI + A)) * 360 / (2PI)