summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--task05/Guschin/MyForm.h42
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) {