【问题标题】:How to determine whether a point (X,Y) is contained within an arc section of a circle (i.e. a Pie slice)?如何确定点 (X,Y) 是否包含在圆的弧段内(即饼图切片)?
【发布时间】:2011-09-10 09:03:31
【问题描述】:

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

我对弧线的了解:

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

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

【问题讨论】:

  • 为什么要标记 C# 和 Java?这看起来就像一道简单的数学题。
  • 哎呀。我最初将问题作为特定于语言的问题,但后来将其更改为更通用。忘记编辑标签。道歉。

标签: geometry geometric-arc


【解决方案1】:

检查:

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

你会得到你的答案。

【讨论】:

【解决方案2】:

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

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

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

  • 如果 A > S

那么这个点就在切片里面

  • 如果 A

那么这个点就在切片里面

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

【讨论】:

  • 我正在考虑这个确切的问题,你是绝对正确的!
  • @chux-ReinstateMonica 你是对的。我之前没看到过
  • 你为什么不能这样做:从开始的角度
  • @WDUK,假设您有一个从 350 度开始到 30 度结束的切片。假设你的观点是 15 度。它在切片内部,但 350
  • 我遇到的问题是说你想定义一个弧,你不能真正定义一些具有这些度数的图像。例如,您不能将最后一张图片定义为“介于 300 到 35 度之间”的弧,因为除非它是顺时针弧,否则这是没有意义的。
【解决方案3】:

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

角度 = 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
【解决方案4】:

您必须先将 atan2() 转换为 0-360,然后才能与起始角度和结束角度进行比较。

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

【讨论】:

  • 如果atan2已经转换为0-360,(A > 0)条件是不是不需要了?
  • 没有。 atan2() 函数返回 -π 到 π 弧度范围内的值。
猜你喜欢
  • 2012-02-20
  • 1970-01-01
  • 2011-05-05
  • 1970-01-01
  • 2011-02-05
  • 2021-07-31
  • 1970-01-01
  • 2020-12-23
  • 1970-01-01
相关资源
最近更新 更多