5 / 5 / 12
Регистрация: 12.09.2013
Сообщений: 156
1

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

01.02.2014, 15:49. Показов 3072. Ответов 6

Студворк — интернет-сервис помощи студентам
прошу вашей помощи, помогите пожалуйста нарисовать в турбо паскале шестигранную пирамиду в 3d пространстве
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.02.2014, 15:49
Ответы с готовыми решениями:

Как нарисовать шестигранную призму?
Заменить центральную фигуру (Икоса́эдр) на шестигранную призму, не пойму как её нарисовать ...

Нарисовать пирамиду из решеток похожую на пирамиду
Задача: нужно нарисовать пирамиду из решеток похожую на пирамиду , на которую взбирается Марио в...

Нарисовать пирамиду
Нарисовать пирамиду из кубов: --|| -|||| |||||| Пожалуйста, заранее спасибо! Добавлено через...

Нарисовать пирамиду
написать программу, которая предлагает ввести пользователю букву (в данном случае E) и пользуясь...

6
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32760 / 21105 / 8139
Регистрация: 22.10.2011
Сообщений: 36,362
Записей в блоге: 8
01.02.2014, 17:26 2
Лучший ответ Сообщение было отмечено Misha_Beginner как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
{$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
5 / 5 / 12
Регистрация: 12.09.2013
Сообщений: 156
02.02.2014, 04:44  [ТС] 3
спасибо спасли меня. но код вообще не понимаю, а можно просто линиями рисовать?? спасибо
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32760 / 21105 / 8139
Регистрация: 22.10.2011
Сообщений: 36,362
Записей в блоге: 8
02.02.2014, 15:19 4
А у меня чем рисуется? Тоже линиями. Только для удобства рисование линий "обернуто" в процедуру Draw3DLine, которая получает координаты 2-х точек в трехмерном пространстве, и рисует между ними линию...
0
5 / 5 / 12
Регистрация: 12.09.2013
Сообщений: 156
02.02.2014, 19:17  [ТС] 5
Цитата Сообщение от UI Посмотреть сообщение
А у меня чем рисуется? Тоже линиями. Только для удобства рисование линий "обернуто" в процедуру Draw3DLine, которая получает координаты 2-х точек в трехмерном пространстве, и рисует между ними линию...
извиняюсь. была моя невнимательность. извините
0
0 / 0 / 0
Регистрация: 13.07.2014
Сообщений: 8
01.10.2014, 18:20 6
Пожалуйста, дайте полный код программы, который рисует усеченную пирамиду. Заранее спасибо.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32760 / 21105 / 8139
Регистрация: 22.10.2011
Сообщений: 36,362
Записей в блоге: 8
01.10.2014, 18:54 7
Вот усеченная пирамида:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
{$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;
  rPyrSmall = 20;
  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(RBig, RSmall, H, N, color: integer);
var
  curr_angle, DAngle: double;
  below, above: PTArr;
  i: integer;
begin
  getmem(below, N * sizeof(TPoint));
  getmem(above, N * sizeof(TPoint));
 
  DAngle := (360 div n) / R2D;
  curr_angle := 0.0; i := 0;
  repeat
    inc(i);
    below^[i].X := RBig*sin(curr_angle);
    below^[i].Z := RBig*cos(curr_angle);
    below^[i].Y := 0;
 
    above^[i].X := Rsmall*sin(curr_angle);
    above^[i].Z := Rsmall*cos(curr_angle);
    above^[i].Y := H;
 
    curr_angle := curr_angle + DAngle;
  until i = n;
 
  for i := 1 to n do begin
    if i > 1 then begin
      draw3dLine(below^[pred(i)], below^[i]);
      draw3dLine(above^[pred(i)], above^[i]);
    end;
    draw3dLine(below^[i], above^[i]);
  end;
  draw3dLine(below^[n], below^[1]);
  draw3dLine(above^[n], above^[1]);
 
  freemem(above, N * sizeof(TPoint));
  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, rPyrSmall, hPyr, 6, 15);
 
  ReadLn;
  CloseGraph;
end.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.10.2014, 18:54
Помогаю со студенческими работами здесь

Нарисовать пирамиду
Нужно нарисовать подобную пирамиду в QBasic, одним циклом FOR ... NEXT. Пирамида должна быть...

Нарисовать пирамиду
Прикрепляем файлы в тему.

Нарисовать пирамиду
Загружайте изображения и файлы на форум и прикрепляйте к сообщению....

Нарисовать четырехугольную пирамиду
Помогите пожалуйста. Надо начертить четырехугольную пирамиду Скажите что неправильно?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru