IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Пересечение отрезков
WiZarDX
сообщение 20.04.2005 12:05
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 81
Пол: Мужской

Репутация: -  0  +


vobsem dany 2 otrezka s koordinatami
(x1 y1) (x2 y2) - 1yj
(x3 y3) (x4 y4) - 2oj

nado ustanovit peresekajutsia oni ili net.
rassmatrivat vse varianty kakije mogut byt.
+ zelatelno poluciat tocku esli oni peresekajuca v vide (x, y)

ocen interesno uznat vase mnenije

В-общем, даны 2 отрезка с координатами:
(x1 y1) (x2 y2) - 1ый
(x3 y3) (x4 y4) - 2ой

надо установить пересекаются они или нет.
Рассматривать все варианты, какие могут быть.
+ желательно получать точки если они пересекаются в виде (x, y)

очень интересно узнать ваше мнение


Вам очень удобно читать свои тексты? А об остальных Вы не удосужились подумать? Или здесь роботы, которым все равно, что и как написано? В следующий раз пишите по-русски (и НЕ латинскими буквами)

Сообщение отредактировано: volvo - 20.04.2005 12:12
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 2)
volvo
сообщение 20.04.2005 12:32
Сообщение #2


Гость






Совершенно стандартное решение:
type
 vec2 = record
   x, y: real;
 end;

function IntersectLineLine(pt11, pt12, pt21, pt22: vec2;
        var pretpt: vec2): boolean;
var
 d, d1, d2, t1, t2: real;
const
 eps = 10E-5;

begin
 IntersectLineLine := false;
 d := (pt12.y - pt11.y)*(pt21.x - pt22.x) -
      (pt21.y - pt22.y)*(pt12.x - pt11.x);
 if abs(d) < eps then exit;

 d1 := (pt12.y-pt11.y)*(pt21.x-pt11.x)-(pt21.y-pt11.y)*(pt12.x-pt11.x);
 d2 := (pt21.y-pt11.y)*(pt21.x-pt22.x)-(pt21.y-pt22.y)*(pt21.x-pt11.x);

 t1:=d1/d;
 t2:=d2/d;
 if not ((t1<=1)and(t1>=0)and(t2>=0)and(t2<=1)) then exit;

 pretpt.x := pt11.x+(pt12.x-pt11.x)*t2;
 pretpt.y := pt11.y+(pt12.y-pt11.y)*t2;
 IntersectLineLine := true
end;

const
 p1: vec2 = (x:1; y:2); { начало первого отрезка }
 p2: vec2 = (x:4; y:1); { конец первого отрезка }
 p3: vec2 = (x:0; y:0); { начало второго отрезка }
 p4: vec2 = (x:2; y:4); { конец второго отрезка }
var res: vec2;

begin
 if intersectLineLine(p1, p2, p3, p4, res) then begin
   write('yes. intersection point:');
   writeln(' x = ', res.x:0:0, ' y = ', res.y:0:0)
 end
 else writeln('no')
end.
 К началу страницы 
+ Ответить 
WiZarDX
сообщение 20.04.2005 12:37
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 81
Пол: Мужской

Репутация: -  0  +


boshoje spasibo protestim
smile.gif

da ja by s radostju pisal russkimi bukvami! tolko vot v komputernom centre RU netu 
sad.gif

Теперь пользуемся кнопкой TRANSLIT

Сообщение отредактировано: volvo - 22.04.2005 2:19
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 17:02
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"