如何确定点(X,Y)是否包含在圆的圆弧部分(即饼图片)中?

时间:2011-06-07 19:48:11

标签: geometry geometric-arc

想象一个圆圈。想象一个馅饼。想象一下,尝试返回一个bool,它确定提供的X,Y参数是否包含在其中一个饼图中。

我对弧的了解:

我有CenterX,CenterY,Radius,StartingAngle,EndingAngle,StartingPoint(圆周上的点),EndingPoint(圆周上的点)。

给定X,Y的坐标,我想确定这个坐标是否包含在饼图幻灯片中的任何位置。

4 个答案:

答案 0 :(得分:35)

检查:

  1. 从centerX,centerY到X,Y的角度应该在start& endangle之间。
  2. 从centerX,centerY到X,Y的距离应小于Radius
  3. 你会得到答案。

答案 1 :(得分:15)

使用以下方法将X,Y转换为极坐标:

角度= arctan(y / x); 半径= sqrt(x * x + y * y);

然后,Angle必须介于StartingAngle和EndingAngle之间,Radius介于0和你的半径之间。

答案 2 :(得分:6)

我知道这个问题很旧,但是没有一个答案考虑圆弧在圆上的位置。

该算法认为所有角度都在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

image 1

2)如果S> E,则有2种可能的情况

image 2

  • 如果A> S和A> E

然后点位于切片内

image 3

  • 如果A

然后点位于切片内

image 4

在所有其他情况下,该点都位于切片之外。

答案 3 :(得分:0)

在与开始和结束角度进行比较之前,必须将atan2()转换为0-360。

(A> 0?A:(2 PI + A))* 360 /(2 PI)