How to determine whether a point (X,Y) is contained within an arc section of a circle (i.e. a Pie slice)?

Deadly 提交于 2019-11-27 11:42:41

问题


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.


回答1:


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

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

  • if A > S and A > E

then the point lies inside the slice

  • if A < S and A < E

then the point lies inside the slice

In all other cases the point lies outside the slice.




回答2:


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.




回答3:


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.



来源:https://stackoverflow.com/questions/6270785/how-to-determine-whether-a-point-x-y-is-contained-within-an-arc-section-of-a-c

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!