Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Drawing;
- using System.Drawing.Drawing2D;
- namespace RefactorMe
- {
- class Risovatel
- {
- static float x, y;
- static Graphics drawing;
- public static void Initialization(Graphics newDrawing)
- {
- drawing = newDrawing;
- drawing.SmoothingMode = SmoothingMode.None;
- drawing.Clear(Color.Black);
- }
- public static void set_position(float x0, float y0)
- { x = x0; y = y0; }
- public static void DrawIt(Pen penColor, double length, double angle)
- {
- // Makes a move with the defined length and angle and draws the traversed path
- var x1 = (float)(x + length * Math.Cos(angle));
- var y1 = (float)(y + length * Math.Sin(angle));
- drawing.DrawLine(penColor, x, y, x1, y1);
- x = x1;
- y = y1;
- }
- public static void Change(double length, double angle)
- {
- x = (float)(x + length * Math.Cos(angle));
- y = (float)(y + length * Math.Sin(angle));
- }
- }
- public class ImpossibleSquare
- {
- public static object Angles { get; private set; }
- public static void Draw(int width, int height, double rotationAngle, Graphics drawing)
- {
- // rotationAngle is not used yet, but it will be used in the future
- Risovatel.Initialization(drawing);
- var sz = Math.Min(width, height);
- var diagonal_length = Math.Sqrt(2) * (sz * 0.375f + sz * 0.04f) / 2;
- var x0 = (float)(diagonal_length * Math.Cos(Math.PI / 4 + Math.PI)) + width / 2f;
- var y0 = (float)(diagonal_length * Math.Sin(Math.PI / 4 + Math.PI)) + height / 2f;
- Risovatel.set_position(x0, y0);
- // since almost all the parameters are the same and only the angle is different, we can create a sample
- // Drawing the first one sideward
- Risovatel.DrawIt(Pens.Yellow, sz * 0.375f, 0);
- Risovatel.DrawIt(Pens.Yellow, sz * 0.04f * Math.Sqrt(2), Math.PI / 4);
- Risovatel.DrawIt(Pens.Yellow, sz * 0.375f, Math.PI);
- Risovatel.DrawIt(Pens.Yellow, sz * 0.375f - sz * 0.04f, Math.PI / 2);
- Risovatel.Change(sz * 0.04f, -Math.PI);
- Risovatel.Change(sz * 0.04f * Math.Sqrt(2), 3 * Math.PI / 4);
- //Drawing the second one sideward
- Risovatel.DrawIt(Pens.Yellow, sz * 0.375f, -Math.PI / 2);
- Risovatel.DrawIt(Pens.Yellow, sz * 0.04f * Math.Sqrt(2), -Math.PI / 2 + Math.PI / 4);
- Risovatel.DrawIt(Pens.Yellow, sz * 0.375f, -Math.PI / 2 + Math.PI);
- Risovatel.DrawIt(Pens.Yellow, sz * 0.375f - sz * 0.04f, -Math.PI / 2 + Math.PI / 2);
- Risovatel.Change(sz * 0.04f, -Math.PI / 2 - Math.PI);
- Risovatel.Change(sz * 0.04f * Math.Sqrt(2), -Math.PI / 2 + 3 * Math.PI / 4);
- //Drawing the third one
- Risovatel.DrawIt(Pens.Yellow, sz * 0.375f, Math.PI);
- Risovatel.DrawIt(Pens.Yellow, sz * 0.04f * Math.Sqrt(2), Math.PI + Math.PI / 4);
- Risovatel.DrawIt(Pens.Yellow, sz * 0.375f, Math.PI + Math.PI);
- Risovatel.DrawIt(Pens.Yellow, sz * 0.375f - sz * 0.04f, Math.PI + Math.PI / 2);
- Risovatel.Change(sz * 0.04f, Math.PI - Math.PI);
- Risovatel.Change(sz * 0.04f * Math.Sqrt(2), Math.PI + 3 * Math.PI / 4);
- //Drawing the fourth one
- Risovatel.DrawIt(Pens.Yellow, sz * 0.375f, Math.PI / 2);
- Risovatel.DrawIt(Pens.Yellow, sz * 0.04f * Math.Sqrt(2), Math.PI / 2 + Math.PI / 4);
- Risovatel.DrawIt(Pens.Yellow, sz * 0.375f, Math.PI / 2 + Math.PI);
- Risovatel.DrawIt(Pens.Yellow, sz * 0.375f - sz * 0.04f, Math.PI / 2 + Math.PI / 2);
- Risovatel.Change(sz * 0.04f, Math.PI / 2 - Math.PI);
- Risovatel.Change(sz * 0.04f * Math.Sqrt(2), Math.PI / 2 + 3 * Math.PI / 4);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement