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

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

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

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> задачка на геометрию, очень сложная по моему
сообщение
Сообщение #21


Michael_Rybak
*****

Группа: Пользователи
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

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


Цитата
а что если я добавлю в мою программу сравнение углов крайних. помоему этим путем можно решить ту ошибку.

Ну попробуй. По-моему - нельзя.

Цитата
а вот здесь я что-то не совсем усек. ты имеешь в виду просто полный перебор сделать, а в процедурах уже сравнение?

Да. Но вариантов всего 6, потому полный перебор - это и есть те шесть вызовов.

Цитата
Т.е. отсортировать по величинам длин сторон? так что бы наибольшая стала основанием,2-я
по величине слева, 3-я справа.

Нет. Не отсортировать, а установить попарное соответствие.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #22


Знаток
****

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

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


Цитата(Client @ 15.01.2008 9:39) *

Т.е. отсортировать по величинам длин сторон?


Нет, ну не получается привязываться к длинам напрямую.
рис...
Все стороны красного меньше, а как не крути не влезет sad.gif

smile.gif сказал "смотри на рисунок", а из головы выложить забыл.

Сообщение отредактировано: feniks25 -


Эскизы прикрепленных изображений
Прикрепленное изображение

--------------------
Objective-C, Unity3d
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #23


Профи
****

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

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


Цитата
Все стороны красного меньше

Про высоту не забываем))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #24


Гость






Цитата(Айра @ 15.01.2008 13:10) *

Про высоту не забываем))

Ну а высота то, что нам даст? Подними левую точку чёрного треугольника на 1 и условие опять рассыпится
 К началу страницы 
+ Ответить 
сообщение
Сообщение #25


Профи
****

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

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


Поднимаем левую точку на 1-цу -> высоты становятся равными. Затем переворачиваем красный треугольник: кладем его основанием на основание (то бишь самую длинную сторону) черного и совмещаем вершины, что напротив оснований, и о, чудо! Он поместился! smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #26


Знаток
****

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

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


Цитата(Айра @ 15.01.2008 18:58) *

совмещаем вершины, что напротив оснований, и о, чудо! Он поместился! smile.gif

Слушай, а может и правда будет работать


--------------------
Objective-C, Unity3d
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #27


Michael_Rybak
*****

Группа: Пользователи
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

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


Тогда можно основание черного уменьшить вдвое (подвинуть левую вершину до середины основания). И опять не влезет.

Что за гадания, ребята. Может, не может. Надо доказывать.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #28


Учиться, учиться еще раз учиться
***

Группа: Пользователи
Сообщений: 158
Пол: Мужской
Реальное имя: Яшар

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


Цитата
Что за гадания, ребята. Может, не может. Надо доказывать.

Абсолютно согласен. Нам нужно найти такой алгоритм чтобы он работал для любых случаев.

Цитата
Не пройдёт, сам пытался вытянуть свою идею. Оно будет работать только пока основания одинаковы.

Ты наверно не совсем правильно понял мою идею. Мой прежный алго остаеться на месте просто при том случае если ответ да то я проверяю крайние углы второго. Я беру большой угол второго и сверяю больше ли он обоих углов первого, если больше то тогда уже ответ не входит.

Цитата
Я же больше склоняюсь к тому, что надо расчитывать координаты вершин треугольников, а потом проверять попадание всех точек второго в первый

А как можно определить на какие точки, в координатной плоскости, попадают вершины , если нам заданы только длины сторон треугольников?


--------------------
Чтобы поразить цель важна не точность, а смелость
Шарль Луи Монтескё
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #29


Знаток
****

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

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


Цитата(Bard @ 16.01.2008 18:51) *

А как можно определить на какие точки, в координатной плоскости, попадают вершины , если нам заданы только длины сторон треугольников?


Нужно рассчитать углы между сторонами. Потом декартовы координаты из полярных.
Основание можно сильно не считать, оно параллельно оси Х

Формулы в файле.


Эскизы прикрепленных изображений
Прикрепленное изображение

--------------------
Objective-C, Unity3d
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #30


Учиться, учиться еще раз учиться
***

Группа: Пользователи
Сообщений: 158
Пол: Мужской
Реальное имя: Яшар

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


Всем привет... Огромное спасибо всем кто принял активное участие в решении этой задачи. Я наконец-то смог ее решить. Вот и ее решение на паскале.

USES Math;
Var a,b,c:extended;
ca,cb,cc,ha,hb,hc:extended;
a1,b1,c1:extended;
ca1,cb1,cc1,ha1,hb1,hc1:extended;
{.........................................................}
Procedure TRI(a,b,c:extended;Var CA,CB,CC,ha,hb,hc:extended);
Var
S,p:extended;
begin
p:=(a+b+c)/2;
S:=sqrt(p*(p-a)*(p-b)*(p-c));
ha:=2*s/a; hb:=2*s/b; hc:=2*s/c;
CC:=arcsin(ha/b); CB:=arcsin(ha/C); CA:=arcsin(hc/b);
if (c*c>a*a+b*b) then CC:=pi-CC else
if (b*b>a*a+c*c) then CB:=pi-CB else
if (a*a>c*c+b*b) then CA:=pi-CA;
end;
{}{}{}{}{}{}{}{}{}{}{}{}
Function Konvert:Boolean;
Var
b2,c2,d:extended;
begin
if (a1>a) OR (ha1>ha) then Konvert:=false
else
if (CC1<=CC) and (CB1<=CB) then Konvert:=true
else
if (CC1>CC) then
begin
b2:=ha1/sin(CC);
d:=sqrt(b2*b2+b1*b1-2*b1*b2*cos(CC1-CC));
if d+a1>a then Konvert:=false
else Konvert:=true;
end
else
if (CB1>CB) then
begin
c2:=ha1/sin(CB);
d:=sqrt(c2*c2+c1*c1-2*c1*c2*cos(CB1-CB));
if d+a1>a then Konvert:=false
else Konvert:=true;

end;

end;
{******************}
Procedure Sdvig(Var a,b,c,CA,CB,CC,ha,hb,hc:extended);
Var
x,y:extended;
begin
y:=b; b:=a; a:=c; c:=y;
x:=hb; hb:=ha; ha:=hc; hc:=x;
x:=cb; cb:=ca; ca:=cc; cc:=x;
end;
{------------------------}
Procedure Perev;
Var x,y:extended;
begin
y:=b1; b1:=c1; c1:=y;
x:=CC1; CC1:=CB1; CB1:=x;
x:=hC1; hC1:=hB1; hB1:=x;
end;
{=====================================}
Var i,j:integer; p:Boolean;
BEGIN
readln(a,b,c); readln(a1,b1,c1); p:=false;

TRI(a,b,c,ca,cb,cc,ha,hb,hc);
TRI(a1,b1,c1,ca1,cb1,cc1,ha1,hb1,hc1);

for
i:=1 to 3 do
begin
for j:=1 to 3 do
begin
if Konvert then begin p:=true; break; end;
Perev;
if Konvert then begin p:=true; break; end;
Perev;
Sdvig(a1,b1,c1,CA1,CB1,CC1,ha1,hb1,hc1);
end;
if p then break;
Sdvig(a,b,c,CA,CB,CC,ha,hb,hc);
end;

if p then writeln('YES') else writeln('NO');
END.


Ну надеюсь алго вы сами поймете good.gif


--------------------
Чтобы поразить цель важна не точность, а смелость
Шарль Луи Монтескё
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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