Аффинные преобразования в пространстве. Простейшие аффинные преобразования в пространстве: перенос, сдвиг, поворот, масштабирование, страница 6

{

MessageBox.Show("Неправильно введены данные!");

return;

}

for (int i = 0; i < 8; i++)

{

old_points[0, i] = points[0, i];

old_points[1, i] = points[1, i];

old_points[2, i] = points[2, i];

}

perenos(xx, yy, zz);

Graph_Update();

koords_print();

}

void Graph_Update()

{

pnlXOY.Invalidate();

pnlXOZ.Invalidate();

pnlYOZ.Invalidate();

}

private void btnRotate_Start_Click(object sender, EventArgs e)

{

float ugol,xx,yy,zz;

int XYZ=0;

try

{

ugol = float.Parse(txtRotate_ugol.Text);

xx = float.Parse(txtRel_X.Text);

yy = float.Parse(txtRel_Y.Text);

zz = float.Parse(txtRel_Z.Text);

}

catch

{

MessageBox.Show("Неправильно введены данные!");

return;

}

local_x = xx;

local_y = yy;

local_z = zz;

if (btnRotate_X.Checked) XYZ = 1;

if (btnRotate_Y.Checked) XYZ = 2;

if (btnRotate_Z.Checked) XYZ = 3;

for (int i = 0; i < 8; i++)

{

old_points[0, i] = points[0, i];

old_points[1, i] = points[1, i];

old_points[2, i] = points[2, i];

}

perenos(-xx, -yy, -zz);

povorot(ugol, XYZ);

perenos(xx, yy, zz);

Graph_Update();

koords_print();

}

private void btnMashtab_Start_Click(object sender, EventArgs e)

{

float kx, ky, kz,xx,yy,zz;

try

{

kx = float.Parse(txtMashtab_X.Text);

ky = float.Parse(txtMashtab_Y.Text);

kz = float.Parse(txtMashtab_Z.Text);

xx = float.Parse(txtRel_X.Text);

yy = float.Parse(txtRel_Y.Text);

zz = float.Parse(txtRel_Z.Text);

}

catch

{

MessageBox.Show("Неправильно введены данные!");

return;

}

if (kx * ky * kz == 0)

{

MessageBox.Show("Коэффициенты должны быть ненулевыми!");

return;

}

local_x = xx;

local_y = yy;

local_z = zz;

for (int i = 0; i < 8; i++)

{

old_points[0, i] = points[0, i];

old_points[1, i] = points[1, i];

old_points[2, i] = points[2, i];

}

perenos(-xx, -yy, -zz);

mashtab(kx, ky, kz);

perenos(xx, yy, zz);

Graph_Update();

koords_print();

}

private void btnNapr_X_CheckedChanged(object sender, EventArgs e)

{

btnNormal_X.Enabled = false;

btnNormal_Y.Enabled = true;

btnNormal_Z.Enabled = true;

}

private void btnNapr_Y_CheckedChanged(object sender, EventArgs e)

{

btnNormal_X.Enabled = true;

btnNormal_Y.Enabled = false;

btnNormal_Z.Enabled = true;

}

private void btnNapr_Z_CheckedChanged(object sender, EventArgs e)

{

btnNormal_X.Enabled = true;

btnNormal_Y.Enabled = true;

btnNormal_Z.Enabled = false;

}

private void btnSdvig_Start_Click(object sender, EventArgs e)

{

float koeff,xx,yy,zz;

int k = 0;

try

{

koeff = float.Parse(txtKoeff_Sdvig.Text);

xx = float.Parse(txtRel_X.Text);

yy = float.Parse(txtRel_Y.Text);

zz = float.Parse(txtRel_Z.Text);

}

catch

{

MessageBox.Show("Неправильно введены данные!");

return;

}

local_x = xx;

local_y = yy;

local_z = zz;

for (int i = 0; i < 8; i++)

{

old_points[0, i] = points[0, i];

old_points[1, i] = points[1, i];

old_points[2, i] = points[2, i];

}

if (btnNapr_X.Checked)

{

if (btnNormal_Y.Checked)

{

k = 1;

perenos(0,-yy,0);

sdvig(koeff, k);

perenos(0, yy, 0);

}

if (btnNormal_Z.Checked)

{

k = 2;

perenos(0, 0, -zz);

sdvig(koeff, k);

perenos(0, 0, zz);

}

}

if (btnNapr_Y.Checked)

{

if (btnNormal_X.Checked)

{

k = 3;

perenos(-xx, 0, 0);

sdvig(koeff, k);

perenos(xx, 0, 0);

}

if (btnNormal_Z.Checked)

{

k = 4;

perenos(0, 0, -zz);

sdvig(koeff, k);

perenos(0, 0, zz);

}

}

if (btnNapr_Z.Checked)

{

if (btnNormal_X.Checked)

{

k = 5;

perenos(-xx, 0, 0);

sdvig(koeff, k);

perenos(xx, 0, 0);

}

if (btnNormal_Y.Checked)

{

k = 6;

perenos(0, -yy, 0);

sdvig(koeff, k);

perenos(0, yy, 0);

}

}

Graph_Update();

koords_print();

}

}

}

Вывод: в данной лабораторной работе я научился выполнять аффинные преобразования в пространстве: перенос, сдвиг, поворот, масштабирование, а также научился реализовывать эти преобразования программно.