Как найти точку пересечения между строкой и прямоугольником?

В текущей версии Java управление версиями библиотеки является довольно покрытым шерстью термином, который полагается на JAR, упаковываемый правильно с полезной декларацией. Даже тогда это - большая работа для запущенного приложения для сбора этой информации вместе полезным способом. Время выполнения JVM не дает Вам справки вообще.

я думаю, что Ваш лучший выбор состоит в том, чтобы осуществить это во время изготовления, с помощью инструментов управления зависимости как Ivy или Maven для выборки правильных версий всего.

Интересно, Java 7 будет, вероятно, включать надлежащую платформу управления версиями модуля для точно этого вида вещи. Не то, чтобы это помогает Вам прямо в данный момент,

50
задан Cimbali 5 March 2016 в 08:33
поделиться

4 ответа

Я не буду давать вам программу для этого, но вот как вы можете это сделать:

  • вычислить угол прямой
  • вычислить угол прямой от центра прямоугольника до единицы углов
  • на основе углов определить, с какой стороны линия пересекает прямоугольник
  • вычислить пересечение между стороной прямоугольника и линией
3
ответ дан 7 November 2019 в 11:02
поделиться

Точка A всегда находится за пределами прямоугольника, а точка B всегда находится в центре прямоугольника

Предполагая, что прямоугольник выровнен по оси, это упрощает задачу:

Наклон линия s = (Ay - By) / (Ax - Bx).

  • Если -h / 2 <= s * w / 2 <= h / 2, то линия пересекает:
    • Правый край, если Ax> Bx
    • Левый край, если Ax
  • Если -w / 2 <= (h / 2) / s <= w / 2, тогда линия пересекает:
    • Верхний край, если Ay> By
    • Нижний край, если Ay

Как только вы узнаете, какое ребро оно пересекает, вы знаете одну координату: x = Bx ± w / 2 или y = By ± h / 2 в зависимости от того, в какую кромку вы попали. Другая координата задается формулой y = By + s * w / 2 или x = Bx + (h / 2) / s.

20
ответ дан 7 November 2019 в 11:02
поделиться

Возможно, вы захотите ознакомиться с Graphics Gems - это классический набор процедур для графики, включающий многие из требуемых алгоритмов. Несмотря на то, что он написан на C и немного устарел, алгоритмы все еще блестят, и перевод на другие языки должен быть тривиальным.

Для вашей текущей задачи просто создайте четыре линии для прямоугольника и посмотрите, какие из них пересекают данную линию.

19
ответ дан 7 November 2019 в 11:02
поделиться

Я не Я не знаю, лучший ли это способ, но вы могли бы вычислить пропорцию линии, которая находится внутри прямоугольника. Вы можете получить это из ширины прямоугольника и разницы между координатами x A и B (или координатами высоты и y; в зависимости от ширины и высоты вы можете проверить, какой вариант применяется, а другой случай будет на расширении стороны прямоугольника). Когда у вас есть это,

1
ответ дан 7 November 2019 в 11:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: