, 2]=5; gran1 [2, 3]=4; [0, 0]=0; gran2 [0, 1]=2; gran2 [0, 2]=1; [1, 0]=3; gran2 [1, 1]=4; gran2 [1, 2]=5; (int i=0; i lt; xv. Length; i ++)
{[i]=px (xv [i], yv [i], zv [i]); [i]=py (xv [i], yv [i], zv [i]);
} ();
} double px (double x, double y, double z)
{((x - rx) * u1x + (y - ry) * u1y + (z - rz) * u1z);
} double py (double x, double y, double z)
{((x - rx) * u2x + (y - ry) * u2y + (z - rz) * u2z);
} void Ini ()
{wp, hp; (ClientSize. Width gt;=ClientSize. Height)
{= 2 * r * ClientSize. Width/ClientSize. Height; hp=2 * r;
}
{= 2 * r; hp=2 * r * ClientSize. Height/ClientSize. Width;
}=ClientSize. Width/wp;=ClientSize. Width/2;=- ClientSize. Height/hp;=ClientSize. Height/2;
} override void OnPaint (PaintEventArgs e)
{. OnPaint (e); g=e. Graphics ;. Clear (Color. White); (int i=0; i lt; xv. Length; i ++)
{[i]=fx (xpl [i]); [i]=fy (ypl [i]);
} bx, by, bz, cx, cy, cz, nx, ny, nz; [] rgb=new int [3]; [] x=new int [3]; int [] y=new int [3]; cosfi ;. FillTriangle myFill=new Triangle. FillTriangle (); (int i=0; i lt;=2; i ++)
{= xv [gran1 [i, 1]] - xv [gran1 [i, 0]];=yv [gran1 [i, 1]] - yv [gran1 [i, 0]];=zv [gran1 [i, 1]] - zv [gran1 [i, 0]];=xv [gran1 [i, 2]] - xv [gran1 [i, 0]];=yv [gran1 [i, 2]] - yv [gran1 [i, 0]];=zv [gran1 [i, 2]] - zv [gran1 [i, 0]];=by * cz-bz * cy;=bz * cx-bx * cz;=bx * cy-by * cx; (nx * u3x + ny * u3y + nz * u3z gt; 0)
{= xv [gran1 [i, 0]]; by=yv [gran1 [i, 0]]; bz=zv [gran1 [i, 0]]; (int j=1; j lt;=3; j ++)
{+=xv [gran1 [i, j]]; by +=yv [gran1 [i, j]]; bz +=zv [gran1 [i, j]];
}=bx/4; by=by/4; bz=bz/4;=bx-sx; cy=by-sy; cz=bz-sz;=(nx * cx + ny * cy + nz * cz)/(Math. Sqrt (nx * nx + ny * ny + nz * nz) * Math. Sqrt (cx * cx + cy * cy + cz * cz)); [0]=(int) (- 255 * cosfi/2 + 255/2); [1]=rgb [0]; rgb [2]=rgb [0]; [0]=xfrm [gran1 [i, 0]]; y [0]=yfrm [gran1 [i, 0]]; [1]=xfrm [gran1 [i, 1]]; y [1]=yfrm [gran1 [i, 1]]; [2]=xfrm [gran1 [i, 2]]; y [2]=yfrm [gran1 [i, 2]] ;. Fill (g, x, y, rgb); [0]=xfrm [gran1 [i, 0]]; y [0]=yfrm [gran1 [i, 0]]; [1]=xfrm [gran1 [i, 2]]; y [1]=yfrm [gran1 [i, 2]]; [2]=xfrm [gran1 [i, 3]]; y [2]=yfrm [gran1 [i, 3]] ;. Fill (g, x, y, rgb);
}
} (int i=0; i lt;=1; i ++)
{= xv [gran2 [i, 1]] - xv [gran2 [i, 0]];=yv [gran2 [i, 1]] - yv [gran2 [i, 0]];=zv [gran2 [i, 1]] - zv [gran2 [i, 0]];=xv [gran2 [i, 2]] - xv [gran2 [i, 0]];=yv [gran2 [i, 2]] - yv [gran2 [i, 0]];=zv [gran2 [i, 2]] - zv [gran2 [i, 0]];=by * cz - bz * cy;=bz * cx - bx * cz;=bx * cy - by * cx; (nx * u3x + ny * u3y + nz * u3z gt; 0)
{= xv [gran2 [i, 0]]; by=yv [gran2 [i, 0]]; bz=zv [gran2 [i, 0]]; (int j=1; j lt;=2; j ++)
{+=xv [gran2 [i, j]]; by +=yv [gran2 [i, j]]; bz +=zv [gran2 [i, j]];
}=bx/3; by=by/3; bz=bz/3;=bx - sx; cy=by - sy; cz=bz - sz;=(nx * cx + ny * cy + nz * cz)/(Math. Sqrt (nx * nx + ny * ny + nz * nz) * Math. Sqrt (cx * cx + cy * cy + cz * cz)); [0]=(int) (- 255 * cosfi/2 + 255/2); [1]=rgb [0]; rgb [2]=rgb [0]; [0]=xfrm [gran2 [i, 0]]; y [0]=yfrm [gran2 [i, 0]]; [1]=xfrm [gran2 [i, 1]]; y [1]=yfrm [gran2 [i, 1]]; [2]=xfrm [gran2 [i, 2]]; y [2]=yfrm [gran2 [i, 2]] ;. Fill (g, x, y, rgb); [0]=xfrm [gran2 [i, 0]]; y [0]=yfrm [gran2 [i, 0]]; [1]=xfrm [gran2 [i, 1]]; y [1]=yfrm [gran2 [i, 1]]; [2]=xfrm [gran2 [i, 2]]; y [2]=yfrm [gran2 [i, 2]] ;. Fill (g, x, y, rgb);
}
}
} int fx (double x)
{(int) (a * x + b);
} int fy (double y)
{(int) (c * y + d);
} void Form1_Resize (object sender, EventArgs e)
{(); ();
}
}
}
Малюнок 4.1 Реалізація програми, яка будує на екрані зображення опуклого тривимірного тіла при паралельній проекції
. Центральна проекція
Завдання: Написати програму, яка будує на екрані зображення опуклого тривимірного тіла при центральній проекції. Видалити невидимі грані. Видимі грані зафарбувати відтінками сірого кольору в залежності від розташування відповідної грані і джерела світла. Для зафарбовування граней використовувати метод сканує рядки [2].
Рішення:
Клас:
using System;
using System. Collections. Generic; System. Linq; System. Text; System. Drawing; System. Collections; WindowsFormsApplication1
{FillTriangle
{void Fill (Graphics g, int [] x, int [] y, int [] rgb)
{maxy, miny; mas=new ArrayList (); a;// Параметр альфа=y [0]; maxy=miny; (int i=1; i lt; 3; i ++)
{(y [i] gt; maxy) maxy=y [i]; (y [i] lt; miny) miny=y [i];
} myPen=new Pen (Color. FromArgb (255, rgb [0], rgb [1], rgb [2])); (int yt=miny; yt lt; maxy; yt ++)
{. Clear (); (y [0]!=Y [1])
{= (float) ...