Построить пирамиду, в основании которой лежит правильный десятиугольник - Turbo Pascal
Формулировка задачи:
построить пирамиду, в основании которой лежит правильный десятиугольник. Фигура должна быть синего цвета и вращаться против часовой стрелки.
Решение задачи: «Построить пирамиду, в основании которой лежит правильный десятиугольник»
textual
Листинг программы
- uses graph,crt;
- {принадлежность точки треугольнику}
- function prin(a,b,c,t:pointtype):boolean;
- function s2(a,b,c:pointtype):real;{удвоенная площадь треугольника}
- begin
- s2:=(a.x-c.x)*(b.y-c.y)-(b.x-c.x)*(a.y-c.y);
- end;
- var f1,f2,f3:real;
- begin
- f1:=s2(t,a,b);
- f2:=s2(t,b,c);
- f3:=s2(t,c,a);
- prin:=(f1*f2<0)or(f2*f3<0);
- end;
- var xc,yc,a,b,h,i,x,y:integer;
- os:array[0..11] of pointtype;{массив точек основания}
- gr:array[1..10] of array[1..4] of pointtype;{массив граней}
- u,f:real;
- begin
- initgraph(xc,yc,'');
- a:=100;
- b:=50;
- h:=200;
- xc:=getmaxX div 2;
- yc:=getmaxY div 2+h div 2;
- u:=pi/2;
- f:=0;
- repeat
- cleardevice;
- for i:=1 to 11 do
- begin
- os[i].x:=xc+round(a*cos(u+f));
- os[i].y:=yc-round(b*sin(u+f));
- u:=u+pi/5;
- end;
- os[0]:=os[10];
- setcolor(15);
- setfillstyle(1,9);
- for i:=1 to 10 do
- begin
- gr[i,1].x:=os[i].x;
- gr[i,1].y:=os[i].y;
- gr[i,2].x:=os[i+1].x;
- gr[i,2].y:=os[i+1].y;
- gr[i,3].x:=xc;
- gr[i,3].y:=yc-h;
- gr[i,4]:=gr[i,1];
- if((gr[i,1].y>yc)and(gr[i,2].y>yc)){все передние грани}
- or((gr[i,1].y>=yc)and(gr[i,2].y<=yc)
- and prin(gr[i,1],gr[i+1,1],gr[i+1,2],gr[i+1,3])){левая видимая грань}
- or((gr[i,1].y<=yc)and(gr[i,2].y>=yc)
- and prin(gr[i,1],gr[i-1,1],gr[i-1,2],gr[i-1,3])){правая видимая грань}
- then fillpoly(4,gr[i]);{рисум все видимые}
- end;
- delay(50);
- f:=f+0.1;
- until keypressed;
- readln
- end.
Объяснение кода листинга программы
- Используется библиотека graph для работы с графиками и crt для вывода точек на график.
- Определена функция prin, которая проверяет, принадлежит ли точка треугольнику.
- Определены функции s2, которые вычисляет удвоенную площадь треугольника.
- Объявлены переменные f1, f2, f3, которые будут использоваться для хранения результатов вычислений функций s2.
- Объявлены переменные xc, yc, a, b, h, i, x, y, которые будут использоваться для построения пирамиды.
- Вычисляются координаты точек основания os с помощью формулы x = xc + round(a cos(u + f)), y = yc - round(b sin(u + f)), где u = pi/2, а f = 0.
- Устанавливается цвет фона и заполнителя на 15 и 9 соответственно.
- Рисуются грани пирамиды с помощью функции fillpoly, где gr[i] — это массив граней пирамиды.
- Если условие выполняется, то рисуются все видимые грани пирамиды.
- Задержка в 50 мс делается с помощью функции delay.
- Переменная f увеличивается на 0.1 каждую секунду.
- Программа завершается после нажатия клавиши.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д