Построить пирамиду, в основании которой лежит правильный десятиугольник - Turbo Pascal

Узнай цену своей работы

Формулировка задачи:

построить пирамиду, в основании которой лежит правильный десятиугольник. Фигура должна быть синего цвета и вращаться против часовой стрелки.

Решение задачи: «Построить пирамиду, в основании которой лежит правильный десятиугольник»

textual
Листинг программы
  1. uses graph,crt;
  2. {принадлежность точки треугольнику}
  3. function prin(a,b,c,t:pointtype):boolean;
  4. function s2(a,b,c:pointtype):real;{удвоенная площадь треугольника}
  5. begin
  6. s2:=(a.x-c.x)*(b.y-c.y)-(b.x-c.x)*(a.y-c.y);
  7. end;
  8. var f1,f2,f3:real;
  9. begin
  10. f1:=s2(t,a,b);
  11. f2:=s2(t,b,c);
  12. f3:=s2(t,c,a);
  13. prin:=(f1*f2<0)or(f2*f3<0);
  14. end;
  15.  
  16. var xc,yc,a,b,h,i,x,y:integer;
  17.     os:array[0..11] of pointtype;{массив точек основания}
  18.     gr:array[1..10] of array[1..4] of pointtype;{массив граней}
  19.     u,f:real;
  20. begin
  21. initgraph(xc,yc,'');
  22. a:=100;
  23. b:=50;
  24. h:=200;
  25. xc:=getmaxX div 2;
  26. yc:=getmaxY div 2+h div 2;
  27. u:=pi/2;
  28. f:=0;
  29. repeat
  30. cleardevice;
  31. for i:=1 to 11 do
  32.  begin
  33.   os[i].x:=xc+round(a*cos(u+f));
  34.   os[i].y:=yc-round(b*sin(u+f));
  35.   u:=u+pi/5;
  36.  end;
  37. os[0]:=os[10];
  38. setcolor(15);
  39. setfillstyle(1,9);
  40. for i:=1 to 10 do
  41.  begin
  42.   gr[i,1].x:=os[i].x;
  43.   gr[i,1].y:=os[i].y;
  44.   gr[i,2].x:=os[i+1].x;
  45.   gr[i,2].y:=os[i+1].y;
  46.   gr[i,3].x:=xc;
  47.   gr[i,3].y:=yc-h;
  48.   gr[i,4]:=gr[i,1];
  49.   if((gr[i,1].y>yc)and(gr[i,2].y>yc)){все передние грани}
  50.   or((gr[i,1].y>=yc)and(gr[i,2].y<=yc)
  51.   and prin(gr[i,1],gr[i+1,1],gr[i+1,2],gr[i+1,3])){левая видимая грань}
  52.   or((gr[i,1].y<=yc)and(gr[i,2].y>=yc)
  53.   and prin(gr[i,1],gr[i-1,1],gr[i-1,2],gr[i-1,3])){правая видимая грань}
  54.   then fillpoly(4,gr[i]);{рисум все видимые}
  55.  end;
  56. delay(50);
  57. f:=f+0.1;
  58. until keypressed;
  59. readln
  60. end.

Объяснение кода листинга программы

  1. Используется библиотека graph для работы с графиками и crt для вывода точек на график.
  2. Определена функция prin, которая проверяет, принадлежит ли точка треугольнику.
  3. Определены функции s2, которые вычисляет удвоенную площадь треугольника.
  4. Объявлены переменные f1, f2, f3, которые будут использоваться для хранения результатов вычислений функций s2.
  5. Объявлены переменные xc, yc, a, b, h, i, x, y, которые будут использоваться для построения пирамиды.
  6. Вычисляются координаты точек основания os с помощью формулы x = xc + round(a cos(u + f)), y = yc - round(b sin(u + f)), где u = pi/2, а f = 0.
  7. Устанавливается цвет фона и заполнителя на 15 и 9 соответственно.
  8. Рисуются грани пирамиды с помощью функции fillpoly, где gr[i] — это массив граней пирамиды.
  9. Если условие выполняется, то рисуются все видимые грани пирамиды.
  10. Задержка в 50 мс делается с помощью функции delay.
  11. Переменная f увеличивается на 0.1 каждую секунду.
  12. Программа завершается после нажатия клавиши.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы