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

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

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

> Кратчайшее растояние, м/д сторонами двух треугольников
сообщение
Сообщение #1


Гость






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


Гость






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


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

 





- Текстовая версия 13.09.2025 18:03
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name