Как определить, содержится ли точка (X, Y) внутри дугового сечения круга (то есть среза пирога)? - PullRequest
17 голосов
/ 07 июня 2011

Представь себе круг. Представь себе пирог. Представьте себе, что вы пытаетесь вернуть bool, который определяет, содержатся ли предоставленные параметры X, Y в одном из этих кусочков.

Что я знаю о дуге:

У меня есть CenterX, CenterY, Радиус, StartingAngle, EndingAngle, StartingPoint (точка на окружности), EndingPoint (точка на окружности).

Учитывая координаты X, Y, я бы хотел определить, содержится ли эта координата где-нибудь в круговом слайде.

Ответы [ 3 ]

36 голосов
/ 07 июня 2011

Проверка:

  1. Угол от центра X, центра Y до X, Y должен быть между началом и концом.
  2. Расстояние от центра X, центра Y до X, Y должно быть меньше, чем радиус

И вы получите ответ.

15 голосов
/ 07 июня 2011

Преобразовать X, Y в полярные координаты, используя это:

Угол = Арктан (у / х); Радиус = sqrt (x * x + y * y);

Тогда угол должен быть между StartingAngle и EndingAngle, а радиус - между 0 и вашим радиусом.

6 голосов
/ 17 августа 2018

Я знаю, что этот вопрос старый, но ни один из ответов не учитывает расположение дуги на окружности.

Этот алгоритм считает, что все углы находятся в диапазоне от 0 до 360, и дуги нарисованы в положительном математическом направлении (против часовой стрелки)

Сначала вы можете преобразовать в полярные координаты: радиус (R) и угол (A). Примечание: используйте функцию Atan2, если она доступна. * 1006 вики *

R = sqrt ((X - CenterX) ^ 2 + (Y - CenterY) ^ 2)

A = atan2 (Y - ЦентрY, X - ЦентрX)

Теперь, если R <Радиус, точка находится внутри круга. </p>

Чтобы проверить, находится ли угол между StartingAngle (S) и EndingAngle (E), вам нужно рассмотреть две возможности:

1) если S

image 1

2) если S> E, то возможны 2 сценария

image 2

  • если A> S и A> E

тогда точка лежит внутри среза

image 3

  • , если A

тогда точка лежит внутри среза

image 4

Во всех остальных случаях точка лежит вне среза.

...