Advertisement
Lulunga

Squares

Dec 9th, 2020 (edited)
1,119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.96 KB | None | 0 0
  1. using System;
  2. using System.Drawing;
  3. using System.Drawing.Drawing2D;
  4.  
  5.  
  6. namespace RefactorMe
  7. {
  8.     class Risovatel
  9.     {
  10.         static float x, y;
  11.         static Graphics drawing;
  12.  
  13.         public static void Initialization(Graphics newDrawing)
  14.         {
  15.             drawing = newDrawing;
  16.             drawing.SmoothingMode = SmoothingMode.None;
  17.             drawing.Clear(Color.Black);
  18.         }
  19.  
  20.         public static void set_position(float x0, float y0)
  21.         { x = x0; y = y0; }
  22.  
  23.         public static void DrawIt(Pen penColor, double length, double angle)
  24.         {
  25.             // Makes a move  with the defined length and angle and draws the traversed path
  26.             var x1 = (float)(x + length * Math.Cos(angle));
  27.             var y1 = (float)(y + length * Math.Sin(angle));
  28.             drawing.DrawLine(penColor, x, y, x1, y1);
  29.             x = x1;
  30.             y = y1;
  31.         }
  32.  
  33.         public static void Change(double length, double angle)
  34.         {
  35.             x = (float)(x + length * Math.Cos(angle));
  36.             y = (float)(y + length * Math.Sin(angle));
  37.         }
  38.     }
  39.  
  40.     public class ImpossibleSquare
  41.     {
  42.         public static object Angles { get; private set; }
  43.  
  44.         public static void Draw(int width, int height, double rotationAngle, Graphics drawing)
  45.         {
  46.             // rotationAngle is not used yet, but it will be used in the future
  47.             Risovatel.Initialization(drawing);
  48.  
  49.             var sz = Math.Min(width, height);
  50.  
  51.             var diagonal_length = Math.Sqrt(2) * (sz * 0.375f + sz * 0.04f) / 2;
  52.             var x0 = (float)(diagonal_length * Math.Cos(Math.PI / 4 + Math.PI)) + width / 2f;
  53.             var y0 = (float)(diagonal_length * Math.Sin(Math.PI / 4 + Math.PI)) + height / 2f;
  54.  
  55.             Risovatel.set_position(x0, y0);
  56.             // since almost all the parameters are the same and only the angle is different, we can create a sample
  57.             // Drawing the first one sideward
  58.  
  59.             Risovatel.DrawIt(Pens.Yellow, sz * 0.375f, 0);
  60.             Risovatel.DrawIt(Pens.Yellow, sz * 0.04f * Math.Sqrt(2), Math.PI / 4);
  61.             Risovatel.DrawIt(Pens.Yellow, sz * 0.375f, Math.PI);
  62.             Risovatel.DrawIt(Pens.Yellow, sz * 0.375f - sz * 0.04f, Math.PI / 2);
  63.  
  64.             Risovatel.Change(sz * 0.04f, -Math.PI);
  65.             Risovatel.Change(sz * 0.04f * Math.Sqrt(2), 3 * Math.PI / 4);
  66.  
  67.             //Drawing the second one sideward
  68.             Risovatel.DrawIt(Pens.Yellow, sz * 0.375f, -Math.PI / 2);
  69.             Risovatel.DrawIt(Pens.Yellow, sz * 0.04f * Math.Sqrt(2), -Math.PI / 2 + Math.PI / 4);
  70.             Risovatel.DrawIt(Pens.Yellow, sz * 0.375f, -Math.PI / 2 + Math.PI);
  71.             Risovatel.DrawIt(Pens.Yellow, sz * 0.375f - sz * 0.04f, -Math.PI / 2 + Math.PI / 2);
  72.  
  73.             Risovatel.Change(sz * 0.04f, -Math.PI / 2 - Math.PI);
  74.             Risovatel.Change(sz * 0.04f * Math.Sqrt(2), -Math.PI / 2 + 3 * Math.PI / 4);
  75.  
  76.             //Drawing the third one
  77.             Risovatel.DrawIt(Pens.Yellow, sz * 0.375f, Math.PI);
  78.             Risovatel.DrawIt(Pens.Yellow, sz * 0.04f * Math.Sqrt(2), Math.PI + Math.PI / 4);
  79.             Risovatel.DrawIt(Pens.Yellow, sz * 0.375f, Math.PI + Math.PI);
  80.             Risovatel.DrawIt(Pens.Yellow, sz * 0.375f - sz * 0.04f, Math.PI + Math.PI / 2);
  81.  
  82.             Risovatel.Change(sz * 0.04f, Math.PI - Math.PI);
  83.             Risovatel.Change(sz * 0.04f * Math.Sqrt(2), Math.PI + 3 * Math.PI / 4);
  84.  
  85.             //Drawing the fourth one
  86.             Risovatel.DrawIt(Pens.Yellow, sz * 0.375f, Math.PI / 2);
  87.             Risovatel.DrawIt(Pens.Yellow, sz * 0.04f * Math.Sqrt(2), Math.PI / 2 + Math.PI / 4);
  88.             Risovatel.DrawIt(Pens.Yellow, sz * 0.375f, Math.PI / 2 + Math.PI);
  89.             Risovatel.DrawIt(Pens.Yellow, sz * 0.375f - sz * 0.04f, Math.PI / 2 + Math.PI / 2);
  90.  
  91.             Risovatel.Change(sz * 0.04f, Math.PI / 2 - Math.PI);
  92.             Risovatel.Change(sz * 0.04f * Math.Sqrt(2), Math.PI / 2 + 3 * Math.PI / 4);
  93.         }
  94.     }
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement