Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2015, 12:22   #1
dimon_snake
Форумчанин
 
Регистрация: 05.11.2015
Сообщений: 167
По умолчанию Лежит ли точка на прямой

Если, к примеру, указаны 3 точки координат, x,y,z. Как понять, что отрезок, проведенный от x до z, пройдет через y? Или не пройдет. Алгоритм дайте, пожалуйста.

Последний раз редактировалось Аватар; 21.11.2015 в 12:34.
dimon_snake вне форума Ответить с цитированием
Старый 21.11.2015, 12:33   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Уравнение прямой, проходящей через две точки, можешь написать? Вот если третья удовлетворяет этому уравнению, тогда сам знаешь что
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 21.11.2015, 12:56   #3
dimon_snake
Форумчанин
 
Регистрация: 05.11.2015
Сообщений: 167
По умолчанию

Мне, собственно, уравнение и надо
dimon_snake вне форума Ответить с цитированием
Старый 21.11.2015, 13:00   #4
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

в этой теме достаточно подробно рассказали про уравнение прямой даже я понял
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 21.11.2015, 13:29   #5
dimon_snake
Форумчанин
 
Регистрация: 05.11.2015
Сообщений: 167
По умолчанию

Ага, спасибо. Только вопрос: Во всех случаях работает, кроме как, если корды равняются нуля, выдает ошибку. Хотя если координаты x=(0:0), y=(1;1), z=(2:2) ю Тогда при делении на ноль выдает ошибку. Что делать?
dimon_snake вне форума Ответить с цитированием
Старый 21.11.2015, 13:40   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Тогда при делении на ноль выдает ошибку
Вы что-то не на то делите.
Формула может давать деление на ноль, только если X1=X2 (это вертикальная прямая), либо когда (Y1=Y2) (это когда горизонтальная прямая)
Эти частные случаи нужно обрабатывать отдельно.

в вашем случае прямая не параллельна ни одной из осей координат, поэтому в знаменателе нуля быть не должно.
показывайте свой код!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.11.2015, 13:47   #7
dimon_snake
Форумчанин
 
Регистрация: 05.11.2015
Сообщений: 167
По умолчанию

Код:
var 
xmet,ymet,xdom,ydom,xyn,yyn:integer;
fi,fo:text;
begin
Assign(fi,'a3.txt');
Assign(fo,'a33.txt');
reset(fi);
Rewrite(fo);
while not eof(f) do begin
Read(fi,xmet,ymet,xdom,ydom,xyn,yyn);
if ymet=ydom+(xmet-xdom)*(yyn-ydom)/xyn-xdom then write(fo,'YES') else Write(fi,'NO');
Readln(fi);
Writeln(fo);
end;
Close(fo);
end.
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 21.11.2015 в 13:52.
dimon_snake вне форума Ответить с цитированием
Старый 21.11.2015, 13:54   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

вы делите на xyn
а надо делить на разность xyn-xdom

скобки поставьте
Код:
 ymet=ydom+(xmet-xdom)*(yyn-ydom)/(xyn-xdom)
ну и я бы проверку написал, что xyn не равен xdom
в этом частном случае надо по другому проверять...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.11.2015, 19:38   #9
dimon_snake
Форумчанин
 
Регистрация: 05.11.2015
Сообщений: 167
По умолчанию

Спасибо, очень помогли
dimon_snake вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск