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

前端 未结 4 720
面向向阳花
面向向阳花 2020-12-02 19:03

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.

<
相关标签:
4条回答
  • 2020-12-02 19:45

    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.

    0 讨论(0)
  • 2020-12-02 19:50

    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.

    0 讨论(0)
  • 2020-12-02 19:54

    You have to convert atan2() to into 0-360 before making comparisons with starting and ending angles.

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

    0 讨论(0)
  • 2020-12-02 19:55

    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

    then the point lies inside the slice

    • if A < E

    then the point lies inside the slice

    In all other cases the point lies outside the slice.

    0 讨论(0)
提交回复
热议问题