cx (vptr [0], vptr [1], vptr [2]) - prjminx) * xcoef; p>
scrv [i] [1] = grmaxy - (calcy (vptr [0], vptr [1], vptr [2]) - prjminy) * ycoef;
}
# define imacro ((i! = 5)? (i +1): 1)// макрос для зв'язування вершин
for (i = 1; i <6; imgline (scrv [0] [0], scrv [0] [1], scrv [i] [0], scrv [i] [1 ]), + + i) (scrv [i] [0], scrv [i] [1], scrv [imacro] [0], scrv [imacro] [1]);
# undef imacro
} A [3] [3];// матриця вращеніяcalcA ()// обчислює матрицю для обертання
{tmpsine = sin (angle), tmpcosine = cos (angle), tmp; (char i = 0, j; i <3; + + i) (j = 0; j <3; A [i] [j] + = tmpcosine * ((i == j? 1:0) - A [i] [j]), + + j) [i] [j] = rv [j] * rv [ i]; = tmpsine * rv [2]; A [0] [1] + =-tmp; A [1] [0] + = tmp; = tmpsine * rv [1]; A [0] [2] + = tmp; A [2] [0] + =-tmp; = tmpsine * rv [0]; A [1] [2] + =-tmp; A [2] [1] + = tmp;
} rotate (float & x, float & y, float & z)// обертає точку навколо rv (вектора обертання)
{tmp [3] = {0, 0, 0}; char i, j; (i = 0; i <3; + + i) for (j = 0; j <3; + + j) tmp [i] + = A [i] [j] * (* (& x + j)); (i = 0; i <3; + + i) * (& x + i) = tmp [i];
} rotatepyra (pyramid3d & pyra)// обертає зазначену піраміду навколо rv (вектора обертання)
{calcA (); for (char i = 0; i <6; + + i) rotate (pyra.v [i] [0], pyra.v [i] [1], pyra.v [i] [2]);} inline redrawpyra ()// підпрограма перемальовування піраміди
{> viewport-> Canvas-> Pen-> Color = clWhite; drawpyra (pyra); -> viewport -> Canvas -> Pen -> Color = pyr_color ; (pyra); drawpyra (pyra);
} __fastcall Tmainform :: rotatebtnClick (TObject * Sender)
{(pyratimer -> Enabled) pyratimer -> Enabled = false;
else// вибір тривалого або одиничного обертання
{();// Переобчислювати кут і вектор обертання
if (wrongvals) return; (rotatechkbox -> Checked) pyratimer -> Enabled = true; redrawpyra ();
} -> Caption = (pyratimer -> Enabled)? "Стоп": "Обертання";
} __fastcall Tmainform :: pyratimerTimer (TObject * Sender)
{redrawpyra ();} R;// R - прямокутна область виділення
bool RBegin = false, RegionSelected = false;
// RBegin - прапор початку виділення фрагмента
// RegionSelected - прапор того, що виділення області вже вироблено
// підпрограма обробки натиснення на кнопку Зберегти як ...
void __ fastcall Tmainform :: saveprjitemClick (TObject * Sender)
{(RegionSelected == true)
{
// Стирання рамки> viewport-> Canvas-> DrawFocu...