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

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

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

> Кратчайшее растояние, м/д сторонами двух треугольников
killer on the road
сообщение 26.06.2005 18:00
Сообщение #1


Гость






В плоскости, даны два треугольника. Требуется определить кратчайшее растояние между их сторонами.
Пока у меня есть только идея тупого перебора. Находим формулы описывающие каждую сторону, проходим циклом по всем Х, попутно генерируя У, и сравниваем с таким же циклом для второго треугольника. Получается очень много сравнений. Может есть какая нибудь хитрая идея?
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
killer on the road
сообщение 28.06.2005 19:48
Сообщение #2


Гость






очень извиняюсь за тупость, а можно полный текст программы... всё вместе никак соеденить не могу. Ну не программер я, не программер.
 К началу страницы 
+ Ответить 
Malice
сообщение 29.06.2005 14:39
Сообщение #3


Профи
****

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

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


Цитата(killer on the road @ 28.06.05 19:48)
очень извиняюсь за тупость, а можно полный текст программы... всё вместе никак соеденить не могу. Ну не программер я, не программер.

Ну лови, 2 варианта вершина-вершина и вершина-грань. Рисуются оба варианта, минимум из них выберешь. На пересечения граней не делал, это вроде просто добавить smile.gif Выход по пробелу, любая другая- еще раз.


uses crt,graph;
type pt=record
x:extended;
y:extended;
end;
var t: array [0..1,1..3] of pt;
i1,j1,i2,i3:byte;
ii,i,j,n,nn,n1:integer;
a,xx2,xx,yy,x4,y4,x4_, y4_, rm,r, rg:extended;
begin
randomize;
i:=detect; initgraph(i,i,'');
repeat
cleardevice;
for n:=0 to 1 do for i:=1 to 3 do begin
t[n][i].x:=random(640); t[n][i].y:=random(480);
end;
i1:=0; j1:=0; rm:=0; rg:=0;
for n:=0 to 1 do begin
for i:=1 to 3 do for j:=1 to 3 do begin
nn:=n xor 1;
r:=sqrt(sqr(t[n][i].x-t[nn][j].x)+sqr(t[n][i].y-t[nn][j].y));
if (r<rm) or (rm=0) and (n=0) then begin rm:=r; i1:=i; j1:=j; end;
if t[nn][(j mod 3)+1].x=t[nn][j].x then a:=0 else
a:=arctan((t[nn][(j mod 3)+1].y-t[nn][j].y)/ (t[nn][(j mod 3)+1].x-t[nn][j].x));
xx:=(t[n][i].x-t[nn][j].x)*cos(a)+
(t[n][i].y-t[nn][j].y)*sin(a)+t[nn][j].x;
yy:=t[nn][j].y;
xx2:=(t[nn][(j mod 3)+1].x-t[nn][j].x)*cos(a)+
(t[nn][(j mod 3)+1].y-t[nn][j].y)*sin(a)+t[nn][j].x;
if ((t[nn][j].x<xx2) and ((xx<t[nn][j].x) or (xx>xx2))) or
((t[nn][j].x>xx2) and ((xx>t[nn][j].x) or (xx<xx2))) then
begin x4:=999; y4:=999; end else begin
x4:=(xx-t[nn][j].x)*cos(-a)+(yy-t[nn][j].y)*sin(-a)+t[nn][j].x;
y4:=(yy-t[nn][j].y)*cos(-a)-(xx-t[nn][j].x)*sin(-a)+t[nn][j].y;
end;
r:=sqrt(sqr(t[n][i].x-x4)+sqr(t[n][i].y-y4));
if (r<rg) or (rg=0) then begin
n1:=n; x4_:=x4; y4_:=y4; rg:=r; i3:=i;
end; end; end;
setcolor(7);
for n:=0 to 1 do for i:=1 to 3 do
line(round(t[n][i].x),round(t[n][i].y),
round(t[n][(i mod 3)+1].x),round(t[n][(i mod 3)+1].y));
setcolor(4);
line(round(t[0][i1].x),round(t[0][i1].y), round(t[1][j1].x),round(t[1][j1].y));
setcolor(5);
line(round(t[n1][i3].x),round(t[n1][i3].y), round(x4_),round(y4_));
until readkey=' ';
end.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
killer on the road   Кратчайшее растояние   26.06.2005 18:00
klem4   а точно надо определить кратчайшее расстояние межд...   26.06.2005 18:07
Altair   Какая разница между чем? у нас всена плоскости про...   26.06.2005 18:33
klem4   :no: неправда. может быть случай, когда кратч...   26.06.2005 18:40
volvo   klem4, опровержение - в студию... :) Oleg_Z имел...   26.06.2005 18:42
Altair   klem4, если ты не прав, ты покупаешь мне 2 пива...   26.06.2005 18:44
klem4   Volvo, написано Но я как раз имел в виду вариант...   26.06.2005 18:46
Altair   все равно я прав! :P пиво ты покупаешь!   26.06.2005 18:49
killer on the road   Господа, всё это конечно интересно, но может кто н...   26.06.2005 19:10
Altair   Алгоритм. (если треугольники не пересекаются) i=1 ...   26.06.2005 19:13
Altair   Можно перебрать для начала сторны и проверить на ...   26.06.2005 19:17
killer on the road   Смысла-то, оно конечно нет. Просто, по условию за...   26.06.2005 19:28
Altair   [b]Как проверить пересекаются ли 2 отрезка? [url=...   26.06.2005 19:36
killer on the road   Люди, ай нид хелп! Пытался сделать по материал...   28.06.2005 1:16
Malice   Короче, так. У тебя 3 вариана самого короткого р...   28.06.2005 11:01
killer on the road   очень извиняюсь за тупость, а можно полный текст п...   28.06.2005 19:48
Malice   Ну лови, 2 варианта вершина-вершина и вершина-гра...   29.06.2005 14:39


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

 



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