Как определить, содержится ли точка (X,Y) внутри дугового сечения круга (то есть среза пирога)?
Представь себе круг. Представь себе пирог. Представьте себе попытку вернуть bool, который определяет, содержатся ли предоставленные параметры X, Y в одном из этих кусочков.
Что я знаю о дуге:
У меня есть CenterX, CenterY, Радиус, StartingAngle, EndingAngle, StartingPoint (точка на окружности), EndingPoint (точка на окружности).
Учитывая координаты X,Y, я хотел бы определить, содержится ли эта координата где-нибудь в круговом слайде.
3 ответа
Проверьте:
- Угол от центра X, центра Y до X,Y должен быть между началом и концом.
- Расстояние от центра X, центра Y до X,Y должно быть меньше, чем радиус
И у тебя будет свой ответ.
Я знаю, что этот вопрос старый, но ни один из ответов не учитывает расположение дуги на окружности.
Этот алгоритм считает, что все углы находятся в диапазоне от 0 до 360, и дуги рисуются в положительном математическом направлении (против часовой стрелки)
Сначала вы можете преобразовать в полярные координаты: радиус (R) и угол (A). Примечание: используйте функцию Atan2, если она доступна. вики
R = sqrt ((X - CenterX) ^ 2 + (Y - CenterY) ^ 2)
A = atan2 (Y - Центр Y, X - Центр X)
Теперь, если R <Радиус, точка находится внутри круга.
Чтобы проверить, находится ли угол между StartingAngle (S) и EndingAngle (E), вам нужно рассмотреть две возможности:
1) если S 2) если S > E, то есть 2 возможных сценария тогда точка лежит внутри среза тогда точка лежит внутри среза Во всех остальных случаях точка лежит вне среза.
Преобразуйте X,Y в полярные координаты, используя это:
Угол = Арктан (у / х); Радиус = sqrt(x * x + y * y);
Тогда угол должен быть между StartingAngle и EndingAngle, а радиус - между 0 и вашим радиусом.
Вы должны преобразовать atan2() в 0-360, прежде чем сравнивать начальный и конечный углы.
(A> 0? A: (2PI + A)) * 360 / (2PI)