diff options
| author | Andrew Guschin <saintruler@gmail.com> | 2020-11-10 00:48:10 +0300 |
|---|---|---|
| committer | Andrew Guschin <saintruler@gmail.com> | 2020-11-10 00:48:10 +0300 |
| commit | b52138db4c8e86c6d365c8cc90ebfdb7070ce259 (patch) | |
| tree | 92711b883bc44cf8c98793a94602d917073c00ea | |
| parent | 0097d1fc4461305a7d86035d145d5479bbbbb9c3 (diff) | |
Добавил отрисовку графика
| -rw-r--r-- | task05/Guschin/MyForm.h | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/task05/Guschin/MyForm.h b/task05/Guschin/MyForm.h index de6955a..de76ae6 100644 --- a/task05/Guschin/MyForm.h +++ b/task05/Guschin/MyForm.h @@ -10,6 +10,9 @@ namespace Guschin { using namespace System::Drawing; using namespace std; + vec2 Vc; + vec2 V; + vec2 Vc_work, V_work; mat3 T; mat3 initT; @@ -70,6 +73,15 @@ namespace Guschin { Wx = maxX - left; Wy = maxY - top; } + System::Void worldRectCalc() + { + Vc_work = normalize(T * vec3(Vc, 1.f)); + V_work = mat2(T) * V; + } + float f(float x) + { + return x * sin(x); + } private: System::Void MyForm_Resize(System::Object^ sender, System::EventArgs^ e) { rectCalc(); @@ -82,12 +94,40 @@ namespace Guschin { Pen^ rectPen = gcnew Pen(Color::Black, 2); g->DrawRectangle(rectPen, left, top, Wx, Wy); + + Pen^ pen = gcnew Pen(Color::Blue, 1); + float deltaX = V_work.x / Wx; + vec2 start; + float x, y; + start.x = Wcx; + x = Vc_work.x; + y = f(x); + start.y = Wcy - (y - Vc_work.y) / V_work.y * Wy; + + while (start.x < maxX) + { + vec2 end; + end.x = start.x + 1.f; + x += deltaX; + y = f(x); + end.y = Wcy - (y - Vc_work.y) / V_work.y * Wy; + + vec2 tmpEnd = end; + bool visible = clip(start, end, minX, minY, maxX, maxY); + if (visible) { + g->DrawLine(pen, start.x, start.y, end.x, end.y); + } + start = tmpEnd; + } } private: System::Void MyForm_Load(System::Object^ sender, System::EventArgs^ e) { - rectCalc(); initT = mat3(1.f); T = initT; + Vc = vec2(-2.f, -2.f); + V = vec2(4.f, 4.f); + rectCalc(); + worldRectCalc(); } private: System::Void MyForm_KeyDown(System::Object^ sender, System::Windows::Forms::KeyEventArgs^ e) { |