如何判断一个点(X,Y)是否包含在圆的弧段内(即饼图切片)?

发布于 2024-11-14 05:43:19 字数 225 浏览 3 评论 0 原文

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

我对弧的了解:

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

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

Imagine a circle. Imagine a pie. Imagine trying to return a bool that determines whether the provided parameters of X, Y are contained within one of those pie pieces.

What I know about the arc:

I have the CenterX, CenterY, Radius, StartingAngle, EndingAngle, StartingPoint (point on circumference), EndingPoint (point on circumference).

Given a coordinate of X,Y, I'd like to determine if this coordinate is contained anywhere within the pie slide.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

阳光①夏 2024-11-21 05:43:19

检查:

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

,你就会得到答案。

Check:

  1. The angle from the centerX,centerY through X,Y should be between start&endangle.
  2. The distance from centerX,centerY to X,Y should be less then the Radius

And you'll have your answer.

仅此而已 2024-11-21 05:43:19

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

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

image 1

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

image 2

  • 如果 A > S

那么该点位于切片内

image 3

  • 如果 A < E

然后该点位于切片

image 4

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

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

image 1

2) if S > E then there are 2 possible scenarios

image 2

  • if A > S

then the point lies inside the slice

image 3

  • if A < E

then the point lies inside the slice

image 4

In all other cases the point lies outside the slice.

冷心人i 2024-11-21 05:43:19

使用以下方法将 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.

一萌ing 2024-11-21 05:43:19

在与开始和结束角度进行比较之前,您必须将 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)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文