From b52138db4c8e86c6d365c8cc90ebfdb7070ce259 Mon Sep 17 00:00:00 2001 From: Andrew Guschin Date: Tue, 10 Nov 2020 00:48:10 +0300 Subject: =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=BE?= =?UTF-8?q?=D1=82=D1=80=D0=B8=D1=81=D0=BE=D0=B2=D0=BA=D1=83=20=D0=B3=D1=80?= =?UTF-8?q?=D0=B0=D1=84=D0=B8=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- task05/Guschin/MyForm.h | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) (limited to 'task05') 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) { -- cgit v1.2.3