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

Ali*_*vin 17 geometry geometric-arc

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

我对弧的了解:

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

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

Wri*_*ken 36

校验:

  1. 从centerX,centerY到X,Y的角度应该在start和endangle之间.
  2. 从centerX,centerY到X,Y的距离应小于半径

你会得到你的答案.


Mat*_*gro 16

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

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

然后,Angle必须在StartingAngle和EndingAngle之间,并且Radius在0和您的Radius之间.

  • 而不是 `Radius = sqrt(x * x + y * y);` 你可以试试 `(x*x+y*y)<=r*r` (2认同)

use*_*690 8

我知道这个问题很老,但没有一个答案考虑圆弧的位置.

该算法认为所有角度都在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,则该点位于切片内

图片1

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

图片2

  • 如果A> S和A> E.

那么这一点就在切片内部

图片3

  • 如果A <S且A <E

那么这一点就在切片内部

图片4

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