Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Лежат ли 2 точки с одной стороны от прямой..

Автор: Altair 10.12.2004 18:02

Вот функция, работающая, и которая проверяет, дежат ли 2 точки с одной стороны от прямой.

Код
function IsOneSide(x1,y1,x2,y2:real; xL1,yL1,xL2,yL2:real):Boolean;
begin
 if xL1<>xL2
 then
 begin
  IsOneSide:=((y1-yL1+(yL1-yL2)*(x1-xL1)/(xL2-xL1))*(y2-yL1+(yL1-yL2)*(x2-xL1)/(xL2-xL1))>0)
 end
 else
 begin
  IsOneSide:=(x1-xL1)*(x2-xL2)>0
 end;
end;


Дело в том, что на алголист.мануал.ру где я взял это, нет описания, то есть не сказанно что это:
((y1-yL1+(yL1-yL2)*(x1-xL1)/(xL2-xL1))*(y2-yL1+(yL1-yL2)*(x2-xL1)/(xL2-xL1))>0
Вопрос:
почему если ((y1-yL1+(yL1-yL2)*(x1-xL1)/(xL2-xL1))*(y2-yL1+(yL1-yL2)*(x2-xL1)/(xL2-xL1)) бельше нуля, то точки действтительно лежат с одной стороны от прямой?

---

Автор: volvo 11.12.2004 0:18

Oleg_Z
Вот что я нашел на http://algolist.manual.ru/olimp/geo_sol.php (задача №6)

Есть 2 варианта решения этой задачи:
Вариант 1. Можно через концы отрезка провести прямую cx+d=y и определить, принадлежит ли точка пересечения двух прямых x, если она существует, отрезку. То есть, мы должны решить уравнение x*(c-a)=(b-d), найти y=ax+b, и проверить выполнение неравенств x1<=x<=x2, y1<=y<=y2.

Но при нахождении x при делении могут возникнуть большие вычислительные погрешности или даже переполнение или потеря значимости, в результате чего получится неверный ответ.

Вариант 2. Обозначим F(x,y)=ax+b-y. Прямая ax+b=y разбивает плоскость на три части: в одной F(x,y)>0, в другой F(x,y)<0 и на прямой ax+b=y F(x,y)=0 . Если эта прямая пересекает отрезок, то либо концы отрезка лежат в различных полуплоскостях, либо хотя бы одна концевая точка отрезка лежит на прямой. Это равносильно выполнению следующего неравенства F(x1,y1)*F(x2,y2)<=0. Таким образом, не вычисляя точку пересечения, мы по знаку функционала судим о том, имеют ли прямая и отрезок общую точку. Очевидно, что второй вариант решения подзадачи предпочтительнее первого.

Автор: Altair 11.12.2004 11:04

Спасибо, это отлично!

ЗЫ:
да, первый вариант напрашивается сам сабой... пересечение...

Автор: promethazine and codeine for sal 5.12.2021 17:14

Does Viagra Come In Yellow