Я знаю, что существует много алгоритмов, чтобы проверить, пересечены ли два линейных сегмента.
Линейные сегменты, о которых я говорю, являются строкой длины, созданной 2 конечными точками.
Но после того как они встретились с параллельным условием, они просто говорят пользователю большой "Нет" и
притворитесь, что нет никакого перекрытия, конечной точки доли или сговора конечной точки.
Я знаю, что могу, может вычислить расстояние между 2 сегментами строк.
Если расстояние 0, проверьте конечные точки, расположенные в другие линейные сегменты или нет.
И это означает, что я еще должен использовать многое из если и && || условия.
Это не трудно, но мой вопрос
"Есть ли прием (или математика) метод для вычисления этого специального аналогичного случая?"
Я надеюсь, что это изображение разъясняет мой вопрос
http://judark.myweb.hinet.net/parallel.JPG
Да, учитывая формулы для обеих линий, проверьте, равны ли их наклоны. Если да, то линии параллельны и никогда не пересекаются.
Если у вас есть точки на каждой из линий, вы можете использовать формулу наклона .
Если оба перпендикулярны оси x, у них обоих будет бесконечный наклон, но они будут параллельны. Все точки на каждой линии будут иметь одинаковые координаты x.
Чтобы работать с линейными сегментами, вычислите точку пересечения, а затем определите, существует ли эта точка пересечения для обоих сегментов.
Я предполагаю, что вас интересует случай, когда два отрезка параллельны (что определяется проверкой наклона, как говорит Whirlwind), и вы пытаетесь определить, пересекаются ли эти два отрезка.
Вместо того, чтобы беспокоиться о расстоянии между прямыми, я бы подумал, что проще всего определить, лежит ли конечная точка одного отрезка внутри другого:
if (segment_contains_point(segment_A, segment_B.start) ||
segment_contains_point(segment_A, segment_B.end)) {
// lines overlap
}
Предположим, у вас есть две строки, описываемые формулами a.x + b.y + c = 0
и d.x + e.y + f = 0
. Две прямые параллельны, если a = 0 и d = 0
или b / a = e / d
. Возможно, вместо того, чтобы выполнять деление, просто убедитесь, что b.d = a.e
.