2016-12-16 2 views
-1

Мне нужно выяснить, если сегмент n находится на одной стороне точки F с сегментом XY.Определите, находится ли сегмент между двумя линиями

Все линии и сегменты параллельны, а длина сегментов одинакова. На иллюстрации красный сегмент AB находится на левой стороне (линии, которая ударяет по точке F). Компакт-диск с шестью сегментами является правильным (вне) заданным критерием.

Как вы определяете эти два случая в GeoGebra или Python?

Особый случай, когда сегмент находится на линиях F или E, также следует учитывать. Надеюсь, этого достаточно для описания проблемы.

Parallel lines

+0

Я пропустил его? Я не вижу метку сегмента * n *. –

+0

Сегмент * n * может быть 'AB' или' CD'. Он привел два примера того, как сегмент * n * может быть – TuanDT

+4

Возможно, этот [ответ] (http://stackoverflow.com/a/1560510/4788274) поможет вам ... –

ответ

2

Вот как вы могли бы сделать это

u = (y[1]-y[0], x[0]-x[1]) 
delta = f[0] * u[0] + f[1] * u[1] 
if delta < x[0]*u[0]+x[1]*u[1]: 
    delta = -delta 
    u = (-u[0], -u[1]) 
assert a[0] * u[0] + a[1] * u[1] < delta 
assert b[0] * u[0] + b[1] * u[1] < delta 
assert c[0] * u[0] + c[1] * u[1] > delta 
assert d[0] * u[0] + d[1] * u[1] > delta 

объяснение: вектор u ортогонально XY. Точки, которые имеют заданный скалярный продукт с u, образуют линию, параллельную XY. Для F этот скалярный продукт равен delta. При необязательно меняя знак u, один может иметь delta больше для F, чем для X. Теперь точек, скалярное произведение с и больше дельты на параллельной линии, которая находится дальше от XY, чем точка F

Редактировать : sorry for bugfix

+0

Некоторые объяснения? – iFlo

+1

@Florian JOUFFREAU см. Мое редактирование выше. – Gribouillis

Смежные вопросы