Если у вас есть круг с центром (center_x, center_y)
и радиусом radius
, как вы проверяете, находится ли заданная точка с координатами (x, y)
внутри круга?
309
Если у вас есть круг с центром (center_x, center_y)
и радиусом radius
, как вы проверяете, находится ли заданная точка с координатами (x, y)
внутри круга?
Ответы:
В общем,
x
иy
должен удовлетворить(x - center_x)^2 + (y - center_y)^2 < radius^2
.Обратите внимание, что точки, которые удовлетворяют приведенному выше уравнению с
<
заменой на==
, считаются точками на окружности, а точки, которые удовлетворяют приведенному выше уравнению с<
заменой на>
, считаются вне круга.источник
<=
найдет точки внутри круга или на его краю.Математически Пифагор, вероятно, является простым методом, как многие уже упоминали.
В вычислительном отношении есть более быстрые способы. Определение:
Если точка с большей вероятностью находится за пределами этого круга, то представьте квадрат, нарисованный вокруг него так, что его стороны касаются этого круга:
Теперь представьте квадратный ромб, нарисованный внутри этого круга так, чтобы его вершины касались этого круга:
Теперь мы покрыли большую часть нашего пространства, и только небольшая область этого круга остается между нашим квадратом и алмазом, подлежащим проверке. Здесь мы возвращаемся к Пифагору, как указано выше.
Если точка скорее всего находится внутри этого круга, то в обратном порядке первые 3 шага:
Альтернативные методы представляют квадрат внутри этого круга вместо ромба, но для этого требуется немного больше тестов и расчетов без вычислительных преимуществ (внутренний квадрат и ромбы имеют одинаковые площади):
Обновить:
Для тех, кто заинтересован в производительности, я реализовал этот метод в c и скомпилировал с -O3.
Я получил время выполнения
time ./a.out
Я реализовал этот метод, обычный метод и фиктивный метод для определения временных затрат.
Normal: 21.3s This: 19.1s Overhead: 16.5s
Таким образом, кажется, что этот метод является более эффективным в этой реализации.
источник
inCircleN
вы используете ненужный ABS. Вероятно, без ABS разница междуinCircle
иinCircleN
будет меньше.Вы можете использовать Пифагор, чтобы измерить расстояние между вашей точкой и центром и посмотреть, меньше ли оно радиуса:
РЕДАКТИРОВАТЬ (шляпа чаевые Полу)
На практике возведение в квадрат часто намного дешевле, чем получение квадратного корня, и, поскольку нас интересует только порядок, мы, конечно, можем отказаться от квадратного корня:
Кроме того, Джейсон отметил, что
<=
должно быть заменено<
и в зависимости от использования это может иметь смыслхотя я считаю, что это не так в строгом математическом смысле, Я исправлен.источник
**
или^
. Самый быстрый способ сделать это , когда нужно просто х ^ 2 или х ^ 3 , чтобы сделать это «вручную»:x*x
.Это более эффективно и доступно для чтения. Это позволяет избежать дорогостоящей операции с квадратным корнем. Я также добавил проверку, чтобы определить, находится ли точка внутри ограничительного прямоугольника круга.
Проверка прямоугольника не нужна, за исключением множества точек или кругов. Если большинство точек находятся внутри окружностей, проверка ограничивающего прямоугольника на самом деле замедлит процесс!
Как всегда, обязательно рассмотрите ваш вариант использования.
источник
Рассчитать расстояние
это в C # ... конвертировать для использования в Python ...
источник
Вы должны проверить, меньше ли расстояние от центра круга до точки, чем радиус, т.е.
источник
Как сказано выше - используйте евклидово расстояние.
источник
Найти расстояние между центром круга и заданными точками. Если расстояние между ними меньше радиуса, то точка находится внутри круга. если расстояние между ними равно радиусу круга, то точка находится на окружности круга. если расстояние больше радиуса, то точка находится за пределами круга.
источник
Приведенное ниже уравнение является выражением, которое проверяет, находится ли точка в данном круге, где xP & yP - координаты точки, xC & yC - координаты центра круга, а R - радиус этого заданного круга.
Если приведенное выше выражение истинно, то точка находится внутри круга.
Ниже приведен пример реализации в C #:
источник
Это то же решение, которое упоминал Джейсон Пуньон , но оно содержит пример псевдокода и некоторые другие подробности. Я видел его ответ после написания этого, но я не хотел удалять свой.
Я думаю, что самый простой способ - это сначала вычислить расстояние между центром круга и точкой. Я бы использовал эту формулу:
Затем просто сравните результат этой формулы, расстояние (
d
), сradius
. Если расстояние (d
) меньше или равно радиусу (r
), точка находится внутри окружности (на краю окружности, еслиd
иr
равны).Вот пример псевдокода, который можно легко преобразовать в любой язык программирования:
Где
circle_x
иcircle_y
- координаты центра окружности,r
- радиус окружности,x
аy
- координаты точки.источник
Мой ответ на C # как полное решение «вырезать и вставить» (не оптимизировано):
Использование:
источник
Как указывалось ранее, чтобы показать, находится ли точка в окружности, мы можем использовать следующее
Чтобы представить это графически, мы можем использовать:
источник
Я использовал код ниже для начинающих, как я :).
открытый класс incirkel {
источник
Переходя в мир 3D, если вы хотите проверить, находится ли 3D-точка в Сфере Юнитов, вы в конечном итоге делаете нечто подобное. Все, что нужно для работы в 2D, это использовать 2D векторные операции.
источник
Я знаю, что через несколько лет я получил ответ, получивший наибольшее количество голосов, но мне удалось сократить время расчета на 4.
Вам нужно только рассчитать пиксели от 1/4 круга, а затем умножить на 4.
Это решение, которое я достиг:
источник
Вот простой код Java для решения этой проблемы:
и математика за ним: /math/198764/how-to-know-if-a-point-is-inside-a-circle
источник
PHP
источник