Введення
двовимірний графіка проекція координата
Існує чимало мов програмування, але лише деякі з них дійсно хороші. Хороший мова програмування повинен бути одночасно ефективним і гнучким, а його синтаксис - коротким, але ясним. Він повинен полегшувати створення правильного коду, не заважаючи робити це, а також підтримувати найсучасніші можливості програмування, але не ультрамодні тенденції, заводящие в глухий кут. І нарешті, гарна мова програмування повинна володіти ще одною, ледь вловимим якістю: викликати у нас таке відчуття, ніби ми знаходимося у своїй стихії, коли користуємося ним. Саме такою мовою і є С # [1].
Ця робота присвячена вивченню деяких розділів інтерактивної комп'ютерної графіки засобами C #.
1. Двовимірна графіка
Задача: Написати програму, яка будує графік функції на відрізку [a, b], заданої явно. Підібрати відрізок [a, b], який містить тільки одну точку розриву [2].
Рішення:
using System; System. Collections. Generic; System. ComponentModel; System. Data; System. Drawing; System. Linq; System. Text; System. Windows. Forms; System. Drawing. Drawing2D; WindowsFormsApplication5
{partial class Form1: Form
{Form1 ()
{();
} override void OnPaint (PaintEventArgs e)
{. OnPaint (e); g=e. Graphics; xmin, xmax, ymin, ymax, x, y, h; r=3; eps=0.001;=1; xmax=6;=(xmax - xmin)/500;=F (xmin);=ymin;=xmin + h; (x=xmin; x lt; r-eps; x=x + h)
{= F (x); (y lt; ymin) ymin=y; (y gt; ymax) ymax=y;
} (x=r + h; x lt;=xmax; x=x + h)
{= F (x); (y lt; ymin) ymin=y; (y gt; ymax) ymax=y;
} dx=(xmax - xmin) * 0.03f; dy=(ymax - ymin) * 0.03f; ax=ClientSize. Width/(xmax - xmin + 2 * dx); ay=- ClientSize. Height/(ymax - ymin + 2 * dy); bx=- ax * (xmin - dx); by=- ay * (ymax + dy) ;. Transform=new Matrix (ax, 0, 0, ay, bx, by); hf, wf, a, b, c, d; asm=(xmax - xmin)/(ymax - ymin); asf=(float) ClientSize. Width/(float) ClientSize. Height; (asm gt; asf)
{= ClientSize. Width;=(ymax - ymin) * wf/(xmax - xmin);=0;=(ClientSize. Height - hf)/2;=ClientSize. Width;=(ClientSize. Height + hf)/2;
}
{= ClientSize. Height;=(xmax - xmin) * hf/(ymax - ymin);=(ClientSize. Width - wf)/2;=0;=(ClientSize. Width + wf)/2;=ClientSize. Height;
}=(c - a)/(xmax - xmin + 2 * dx);=(b - d)/(ymax - ymin + 2 * dy);=a - ax * (xmin - dx);= b - ay * (ymax + dy); hline=(xmax - xmin) * 0.001f; blackPen=new Pen (Color. Black, hline); bluePen=new Pen (Color. Blue, hline);=xmin ;. DrawLine (bluePen, xmin, 0, xmax, 0) ;. DrawLine (bluePen, 0, ymin, 0, ymax); (x lt;=r - h)
{. DrawLine (blackPen, x, F (x), x + h, F (x + h));=x + h;
}=r + h; (x lt;=xmax)
{. DrawLine (blackPen, x, F (x), x + h, F (x + h));=x + h;
}
} float F (float x)
{x/(x * x - 9);
} void Form1_Resize (object sender, EventArgs e)
{();
}
}
}
Малюнок 1.1 Реалізація програми, яка будує двовимірний графік функції, заданої явно, з однією точкою розриву
Завдання: Написати програму, яка будує графік функції на відрізку [a, b], заданої параметрично.
Рішення:
using System; System. Collections. Generic; System. ComponentModel; System. Data; System. Drawing; System. Linq; System. Text; System. Windows. Forms; System. Drawing; System. Drawing. Drawing2D; WindowsFormsApplication1
{partial class Form1: Form
{Form1 ()
{();
} override void OnPaint (PaintEventArgs e)
{. OnPaint (e); g=e. Graphics; xmin, xmax, ymin, ymax, x, t, y, h; tmin=- 5, tmax=5;=F1 (tmin); xmax=F1 (tmax);=(tmax - tmin)/500;=F2 (tmin);=ymin;=tmin + h; (t=tmin; t lt; tmax; t=t + h)
{= F1 (t); (x lt; xmin) xmin=x; (x gt; xmax) xmax=x;=F2 (t); (y lt; ymin) ymin=y; (y gt; ymax) ymax=y;
} dx=(xmax - xmin) * 0.03f; dy=(ymax - ymin) * 0.03f; ax=ClientSize. Width/(xmax - xmin + 2 * dx); ay=- ClientSize. Height/(ymax - ymin + 2 * dy); bx=- ax * (xmin - dx); by=- ay * (ymax + dy); hf, wf, a, b, c, d; asm=(xmax- xmin)/(ymax - ymin); asf=(float) ClientSize. Width/(float) ClientSize. Height; (asm gt; asf)
{= ClientSize. Width;=(ymax - ymin) * wf/(xmax - xmin);=0;=(ClientSize. Height - hf)/2;=ClientSize. Width;=(ClientSize. Height + hf)/2;
}
{= ClientSize. Height;=(xmax - xmin) * hf/(ymax - ymin);=(ClientSize. Width - wf)/2;=0;=(ClientSize. Width + wf)/2;=ClientSize. Height;
}=(c - a)/(xmax - xmin + 2 * dx);=(b - d)/(ymax - ym...