Одномерный тест пересечения отрезков / рядов: Имя решения? - PullRequest
5 голосов
/ 13 октября 2009

Я разработал метод проверки двух одномерных линейных сегментов / диапазонов.

Таким образом, определение диапазона как:

[min, max]

Дано два экземпляра диапазона:

a = [min, max] 
b = [min, max]

Я использую следующее, чтобы проверить, пересекаются ли они:

(a.max - b.min) * (b.max - a.min) >= 0.

Я думаю, что это одномерный перекрестный продукт, поэтому мой вопрос:

Это решение классифицируется как одномерный перекрестный продукт или что-то еще?

Ответы [ 2 ]

8 голосов
/ 13 октября 2009

Как насчет:

intersects = !((a.max < b.min) || (b.max < a.min))

Это быстрее (не требует многократного использования, и приличный компилятор оптимизирует NOT) и так же легко читается.

1 голос
/ 13 октября 2009

Одномерное перекрестное произведение - это просто x*y для x и y для обоих действительных чисел. Так что, я думаю, вы можете назвать это одномерным перекрестным произведением, но это просто причудливое название для умножения.

Это милый трюк, но я не думаю, что он имеет какие-то особые математические последствия. Перекрестные продукты - это векторы, а не линейные сегменты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...