21

想象一个圆圈。想象一个馅饼。想象一下,试图返回一个布尔值,该布尔值确定所提供的 X、Y 参数是否包含在其中一个饼图中。

我对弧线的了解:

我有 CenterX、CenterY、半径、StartingAngle、EndingAngle、StartingPoint(圆周上的点)、EndingPoint(圆周上的点)。

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

4

4 回答 4

36

查看:

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

你会得到你的答案。

于 2011-06-07T19:51:14.107 回答
16

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

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

那么 Angle 必须在 StartingAngle 和 EndingAngle 之间,Radius 必须在 0 和您的 Radius 之间。

于 2011-06-07T19:53:09.803 回答
16

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

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

  • 如果 A > S

那么该点位于切片内

图 3

  • 如果 A < E

那么该点位于切片内

图 4

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

于 2018-08-17T13:36:25.820 回答
0

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

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

于 2020-10-04T04:12:11.527 回答