Мне было интересно, справедлив ли следующий алгоритм для проверки того, находится ли точка внутри прямоугольника. Я разработал его, используя свою собственную интуицию (нет сильной основы триггера/математики для ее поддержки), поэтому я бы хотел услышать от кого-то, у кого больше опыта в этом вопросе.Точка внутри повернутого 2D прямоугольника (не используя перевод, триггерные функции или точечный продукт)
Контекст:
- Прямоугольник определяется с 4 очками. Он может быть повернут.
- Координаты всегда положительные.
- По определению точка рассматривается внутри прямоугольника, если пересекает его.
Гипотеза:
- Используйте расстояние между точкой и прямоугольника вершин (первая диаграмма ниже).
- Максимальное возможное полное расстояние, когда точка находится в одной вершине (вторая диаграмма).
- Если точка находится за пределами прямоугольника, расстояние будет больше (третья диаграмма).
Диаграмма ссылка: http://i45.tinypic.com/id6o35.png
Алгоритм (Java):
static boolean pointInsideRectangle(Point[] rect, Point point) {
double maxDistance = distance(rect[0], rect[1]);
maxDistance += distance(rect[0], rect[2]);
maxDistance += distance(rect[0], rect[3]);
double distance = 0;
for (Point rectPoint : rect) {
distance += distance(rectPoint, point);
if (distance > maxDistance) return false;
}
return true;
}
Вопросы: это правильно? не
Я нашел много реализаций этого и многое, многое, намного лучшего алгоритма (глупо меня, я забыл проверить G с помощью «проверить, находится ли точка внутри полигона»), где на этот вопрос ответит множество раз в лучше, чем у меня: [Stackoverflow] (http://stackoverflow.com/questions/217578/point-in-polygon-aka-hit-test), этот [веб-сайт] (http://alienryderflex.com/polygon/) и в [Wikipeida] (http://en.wikipedia.org/wiki/Point_in_polygon) – Alen