Нарисовать шестигранную пирамиду в 3d пространстве - Turbo Pascal

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

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

прошу вашей помощи, помогите пожалуйста нарисовать в турбо паскале шестигранную пирамиду в 3d пространстве

Решение задачи: «Нарисовать шестигранную пирамиду в 3d пространстве»

textual
Листинг программы
{$n+}
uses graph;
 
type
  TPoint = record
    X, Y, Z: double;
  end;
  PTArr = ^TArr;
  TArr = array[1 .. pred(maxint div sizeof(TPoint))] of TPoint;
 
const
  R2D = 180 / Pi;
 
const
  rPyrBig   = 50;
  hPyr = 140;
 
 
var
  centerX, centerY: integer;
 
const
  sqrt2 = 1.414213562;
function CoordX(X, Z: double): integer;
begin
  CoordX := trunc((X + CenterX) - Z);
end;
function CoordY(Y, Z: double): integer;
begin
  CoordY := Trunc(CenterY - Y + Z);
end;
 
procedure draw3DPnt(P: TPoint);
var
  NewZ: integer;
begin
  NewZ := trunc(P.Z / sqrt2);
  putpixel( CoordX(P.X, NewZ), CoordY(P.Y, NewZ), White);
end;
 
procedure Draw3DLine(P1, P2: TPoint);
var Z1, Z2: integer;
begin
  Z1 := trunc(P1.Z / sqrt2);
  moveto( CoordX(P1.X, Z1), CoordY(P1.Y, Z1) );
  Z2 := trunc( P2.Z / Sqrt2 );
  lineto( CoordX(P2.X, Z2), CoordY(P2.Y, Z2) );
end;
 
procedure Axis(Color: integer);
begin
  cleardevice;
  setcolor(Color);
  line(1, CenterY, GetMaxX, CenterY);
  line(CenterX, 1, CenterX, GetMaxY);
  line(CenterX - CenterY, GetMaxY,
       CenterX + CenterY, 1);
  setcolor(White);
  rectangle(1, 1, GetMaxX, GetMaxY)
end;
 
procedure Pyramide(R, H, N, color: integer);
var
  curr_angle, DAngle: double;
  below: PTArr;
  i: integer;
const
  P : TPoint = (X:0; Y:0; Z:0);
begin
  getmem(below, N * sizeof(TPoint));
 
  DAngle := (360 div n) / R2D;
  curr_angle := 0.1; i := 0;
  repeat
    inc(i);
    below^[i].X := R*sin(curr_angle);
    below^[i].Z := R*cos(curr_angle);
    below^[i].Y := 0;
    curr_angle := curr_angle + DAngle;
  until i = n;
 
  p.Y := H;
  for i := 1 to n do begin
    if i > 1 then draw3dLine(below^[pred(i)], below^[i]);
    draw3dLine(below^[i], P);
  end;
  draw3dLine(below^[n], below^[1]);
 
  freemem(below, N * sizeof(TPoint));
end;
 
var
  Gd, Gm  : Integer;
 
begin
  Gd:= Detect;
  InitGraph(Gd, Gm, '');
  if GraphResult <> grOk then Halt;
 
  centerx := GetMaxX div 2; centery := GetMaxY div 2;
 
  Axis(Red);
  Pyramide(rPyrBig, hPyr, 6, 15);
 
  ReadLn;
  CloseGraph;
end.

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

  1. В начале кода объявляются переменные, включая centerX и centerY для хранения координат центра пирамиды.
  2. Затем определяется тип TPoint с полями X, Y и Z типа double.
  3. Создается массив TArr с использованием функции pred(maxint div sizeof(TPoint)), которая делит максимальное целое число на размер TPoint в байтах и округляет результат вниз до ближайшего целого числа. Это позволяет создать массив TPoint с максимально возможным количеством элементов.
  4. Далее определяются константы R2D, rPyrBig, hPyr и sqrt2.
  5. Затем определяются функции CoordX и CoordY, которые преобразуют координаты точек из мировых координат в экранные координаты.
  6. После этого определяются процедуры draw3DPnt и Draw3DLine, которые рисуют точки и линии в 3D пространстве.
  7. Далее определяется процедура Axis, которая рисует оси координат.
  8. Затем определяется процедура Pyramide, которая рисует пирамиду. Она использует массив ниже для хранения точек пирамиды.
  9. После этого объявляются переменные Gd и Gm для использования функций Detect и InitGraph от библиотеки graph.
  10. Затем вызывается функция Detect для определения доступных графических устройств.
  11. После этого вызывается функция InitGraph с параметрами Gd и Gm, которые используются для создания графика.
  12. Если функция InitGraph не возвращает значение grOk, то программа завершается.
  13. Далее вычисляются координаты центра пирамиды с помощью функций GetMaxX, GetMaxY и div 2.
  14. Затем вызывается процедура Axis с цветом Red для рисования осей координат.
  15. После этого вызывается процедура Pyramide с параметрами rPyrBig, hPyr, 6 и 15, которые определяют размеры и цвет пирамиды.
  16. Наконец, вызывается функция ReadLn для чтения ввода с консоли.
  17. После этого вызывается функция CloseGraph для закрытия графика.

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


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

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

9   голосов , оценка 4.222 из 5
Похожие ответы