From 9c0e1d4fdf65bf2c0d160ad2509ae33fd1f784c6 Mon Sep 17 00:00:00 2001 From: Andrew Guschin Date: Tue, 10 Nov 2020 01:06:41 +0300 Subject: =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=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=20=D0=BD=D0=B0=20=D0=B1=D0=BE?= =?UTF-8?q?=D0=BB=D0=B5=D0=B5=20=D1=82=D0=BE=D1=87=D0=BD=D1=83=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- task05/Guschin/MyForm.h | 43 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/task05/Guschin/MyForm.h b/task05/Guschin/MyForm.h index de76ae6..207294e 100644 --- a/task05/Guschin/MyForm.h +++ b/task05/Guschin/MyForm.h @@ -80,7 +80,11 @@ namespace Guschin { } float f(float x) { - return x * sin(x); + return tan(x); + } + bool f_exists(float x, float delta) + { + return fabs(2.f * acos(cos(x)) - Math::PI) > delta; } private: System::Void MyForm_Resize(System::Object^ sender, System::EventArgs^ e) { @@ -96,28 +100,39 @@ namespace Guschin { g->DrawRectangle(rectPen, left, top, Wx, Wy); Pen^ pen = gcnew Pen(Color::Blue, 1); + float deltaX = V_work.x / Wx; - vec2 start; + bool hasStart, hasEnd; + vec2 start, end; float x, y; + start.x = Wcx; x = Vc_work.x; - y = f(x); - start.y = Wcy - (y - Vc_work.y) / V_work.y * Wy; + hasStart = f_exists(x, deltaX); + if (hasStart) + { + 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; + hasEnd = f_exists(x, deltaX); + if (hasEnd) + { + 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); + bool visible = hasStart && hasEnd && clip(start, end, minX, minY, maxX, maxY); if (visible) { g->DrawLine(pen, start.x, start.y, end.x, end.y); } start = tmpEnd; + hasStart = hasEnd; } } private: @@ -131,13 +146,25 @@ namespace Guschin { } private: System::Void MyForm_KeyDown(System::Object^ sender, System::Windows::Forms::KeyEventArgs^ e) { + float centerX = Vc_work.x + V_work.x / 2; + float centerY = Vc_work.y + V_work.y / 2; + switch (e->KeyCode) { case Keys::Escape: T = initT; break; + case Keys::A: + T = translate(-V_work.x / Wx, 0.f) * T; + break; + case Keys::Z: + T = translate(-centerX, -centerY) * T; + T = scale(1.1) * T; + T = translate(centerX, centerY) * T; + break; default: break; } + worldRectCalc(); Refresh(); } }; -- cgit v1.2.3