вера} tet: array [1 .. 4] of d3d =
((x: 50; y: 80; z: 50),
(x: 50; y: 0; z: 80),
(x: 100; y: 0; z: 0),
(x: 0; y: 0; z: 0)); cub: array [1 .. 8] of d3d =
((x: -50; y: -50; z: 50),
(x: -50; y: 50; z: 50),
(x: 50; y: 50; z: 50),
(x: 50; y: -50; z: 50),
(x: -50; y: -50; z: -50),
(x: -50; y: 50; z: -50),
(x: 50; y: 50; z: -50),
(x: 50; y: -50; z: -50)
); cyl: array [0 .. 21] of d3d;
{перевірка грані на видимість} {a, b, c-координати грані} TestGran (a, b, c: d3d): boolean; v1, w2, v2, w1, n: real; {внутрішні змінні для побудови нормалі до грані}
{побудова нормалі}: = ax-cx;: = ay-cy;: = bx-cx;: = by-cy;: = v1 * w2-v2 * w1; {перевірка видимості} n> 0 then: = true {грань видна}: = false; {грань не відображається};
{процедура малювання граней} {p1, p2, p3 - координати грані}
{col - колір межі} DrawGran (p1, p2, p3, p4: d3d; col: byte);: array [1 .. 4] of pointtype; {внутрішній тип для заливки грані заданим кольором} TestGran (p1, p2, p3) = false then exit; (1, col); {визначення типу заповнення}
{обробка внутрішніх змінні для заповнення and (zar [1]. y = zar [4]. y) fillpoly (3, zar) fillpoly (4, zar); {заповнити грань заданим кольором} (6, 1); {визначення типу заповнення};
{процедура малювання вектора} DrawVector; i: integer; figura = 1 then (tet [1], tet [2], tet [3], tet [1], 1); (tet [1], tet [ 3], tet [4], tet [1], 2); (tet [1], tet [4], tet [2], tet [1], 3); (tet [4], tet [3] , tet [2], tet [4], 4);; figura = 2 then (cub [4], cub [3], cub [2], cub [1], 11); (cub [5], cub [6], cub [7], cub [8], 12); (cub [1], cub [2], cub [6], cub [5], 13); (cub [3], cub [4 ], cub [8], cub [7], 14); (cub [2], cub [3], cub [7], cub [6], 15); (cub [5], cub [8], cub [4], cub [1], 16);; figura = 3 theni: = 1 to 9 do (cyl [0], cyl [i], cyl [i +1], cyl [0], i +7 ); (cyl [21], cyl [10 + i +1], cyl [10 + i], cyl [21], i +7); (cyl [10 + i], cyl [10 + i +1] , cyl [i +1], cyl [i], i +7);;;;
{процедура повороту точки в тривимірному просторі}
{xv, yv, zv - кути повороту точки в градусах}
{x, y, z - точка, яку потрібно повернути} rotate (xv, yv, zv: real; var x, y, z: real); Yt, Xt, Zt: real; {тимчасові змінні} p>
{повернути по осі y}: = Y * cos ((xv * rad))-Z * sin ((xv * rad));: = Y * sin ((xv * rad)) + Z * cos ( (xv * rad));: = Yt; Z: = Zt;
{повернути по осі x}: = X * cos ((yv * rad))-Z * sin ((yv * rad));: = X * sin ((yv * rad)) + Z * cos ( (yv * rad));: = Xt; Z: = Zt;
{повернути по осі z}: = X * cos ((zv * rad))-Y * sin ((zv * rad));: = X * sin ((zv * rad)) + Y * cos ( (zv * rad));: = Xt; Y: = Yt;; RotateAll; j: = 1 to 4 do rotate (a1, a2, a3, tet [j]. x, tet [j]. y, tet [ j]. z); j: = 1 to 8 do rotate (a1, a2, a3, cub [j]. x, cub [j]. y, cub [j]. z); j: = 0 to 21 do rotate (a1, a2, a3, cyl [j]. x, cyl [j]. y, cyl [j]. z);;: = Detect; {ініці...