Помощь - Поиск - Пользователи - Календарь
Полная версия: Пострить треугольники
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
TOPEHTO
Всем доброго времени суток!
Вот сеголня еще задали...В паскалевской графики Я вообще не силен, поэтому надеюсь что хоть ктонибудь даст алгоритм и не пройдет мима...
1 треугольник
Цитата
Построить на экране треугольник по введенным длинам трех сторон. Построенный треугольник должен поместиться на экране. Его изображение должно соответствовать принятым в школе стандартам: тупоугольный треугольник должен быть ориентирован большей стороной вниз; прямоугольный треугольник должен стоять на катете (прямой угол слева); равнобедренный треугольник должен стоять на основании.

2 треугольник
Цитата
Вывести на экран вращающееся изображение произвольного невырожденного треугольника.

в душе не представляю как это делать...народ подскажите хотя бы алгоритм, ПОИСК рез-татов не дал, хотя смотрел хорошо... wacko.gif wacko.gif wacko.gif ...
volvo
Ну, начинать тебе надо совсем не с графики... Графика и отрисовка результата - завершающий этап...

Начинай с определения, является ли треугольник равносторонним/прямоугольным/тупоугольным... (кстати, в задании есть небольшая недоговоренность, что-ли: как, например, должен располагаться прямоугольный равнобедренный треугольник? Я надеюсь, оспаривать возможность его существования ты не станешь wink.gif )

Сможешь по длинам трех сторон однозначно определить, к какому из этих видов треугольников относится заданный тебе?
TOPEHTO
Н-у-у-у-у-у-у как тебе сказать чтобы сильно в твоих глазах не упасть... unsure.gif ...
Вообщем мне бы хотяб на словах алгоритм и поподробнее, а родить Я чтонибудь попытаюсь...просто сам алгоритмы рожать не могу...ну не получается и все тут... nea.gif ...
А насчет того что если прямоугольный равнобедренный...думаю что тех которые в условие за глаза...
Цитата
тупоугольный треугольник должен быть ориентирован большей стороной вниз; прямоугольный треугольник должен стоять на катете (прямой угол слева); равнобедренный треугольник должен стоять на основании.

плиз помоги...хотя бы морально... smile.gif ...
TOPEHTO
Ребят ну помогите плиз........а то опять затухнет тема...sad.gif...
мисс_граффити
что-то вспомнился Майерс....
в программе начать надо явно с проверки, можно ли из этих сторон слепить треугольник.

а так - подумай, чисто математически, как, зная координаты 2 вершин треугольника и длины сторон, найти координаты третей.
TOPEHTO
Ну народ...выручайте...smile.gif
1 задачу все еще надо сделать и сдать, очень на Вас надеюсь...а вращающийся треугольник сделал, может кому и понадобится
Цитата
{$N+}
{$E+}
Program lab6_2;
uses Crt, Graph;
var Gd, Gm: Integer;
x1,x2,x3,y1,y2,y3:integer;
xc,yc:integer;
xx1,xx2,xx3,yy1,yy2,yy3:integer;
ugol,wag:real;
r1,r2,r3,u1,u2,u3:real;
g:boolean;
a:Char;
Procedure system_delay(x:longint);
var system_timer:longint absolute $0000:$046C;
stop_timer:longint;
begin
stop_timer:=system_timer;
repeat
until (stop_timer+x)<=system_timer;
End;

Function opred_ugol(katy,katx:integer):real;
var uu:real;
begin
if (katy<0)and(katx<0) then uu:=arctan((-1)*katy/katx);
if (katy<0)and(katx>0) then uu:=arctan((-1)*katy/katx)+Pi;

if ((katy>=0)and(katx<0)) then uu:=arctan((-1)*katy/katx);
if ((katy>=0)and(katx>0)) then uu:=arctan((-1)*katy/katx)+Pi;

if (katy<0)and(katx=0) then uu:=3*Pi/2;
if (katy>=0)and(katx=0) then uu:=Pi/2;
opred_ugol:=uu;
End;

begin
clrscr;
Write('Enter x1,y1,x2,y2,x3,y3: ');
Readln(x1,y1,x2,y2,x3,y3);
Write('Enter to4ku dentra vrawenii(x,y): ');
Readln(xc,yc);
Write('Enter wag: ');
Readln(wag);
Write('Pokazivat vspomogatelnie okrugnosti(y/n): ');
Readln(a);
g:=a='y';
r1:=sqrt(sqr(x1-xc)+sqr(y1-yc));
r2:=sqrt(sqr(x2-xc)+sqr(y2-yc));
r3:=sqrt(sqr(x3-xc)+sqr(y3-yc));
u1:=opred_ugol(y1-yc,x1-xc);
u2:=opred_ugol(y2-yc,x2-xc);
u3:=opred_ugol(y3-yc,x3-xc);
ugol:=0;
Gd := Detect;
InitGraph(Gd, Gm, '');
repeat
xx1:=xc+Round(r1*cos(ugol+u1));
yy1:=yc+Round(r1*sin(ugol+u1));
xx2:=xc+Round(r2*cos(ugol+u2));
yy2:=yc+Round(r2*sin(ugol+u2));
xx3:=xc+Round(r3*cos(ugol+u3));
yy3:=yc+Round(r3*sin(ugol+u3));
ClearDevice;
if g then begin
setcolor(3);
Circle(xc,yc,Round(r1));
Circle(xc,yc,Round(r2));
Circle(xc,yc,Round(r3));
End;
setcolor(15);
MoveTo(xx1,yy1);
LineTo(xx2,yy2);
LineTo(xx3,yy3);
LineTo(xx1,yy1);
if (ugol<6.28) then ugol:=ugol+wag else ugol:=ugol+wag-6.28;
system_delay(2);
until KeyPressed;
CloseGraph;
end.

Очень надеюсь на Вашу помощь... wink.gif ...
TOPEHTO
ну что...никто помочь не может! dry.gif
volvo
Ну ТЫ же вопрос во втором посте проигнорировал, с чего бы на ТВОИ вопросы теперь должны отвечать? mad.gif
ramzes
Вот куб крутится, может пригодится.
TOPEHTO
Volvo, Ну что ты злишся?smile.gif
Естественно не смогу...ну так на вскидку...если толком расскажешь-может и смогу
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.