Программа рисует неправильный треугольник, нужно отрефакторить код я изменил название переменных на понятные и т.д. определенная часть кодa рисует стороны. Я пытался эту чать выделить в методы void но тогда все начиналось рисоваться неправильно. Как это красиво сделать? Честно не понимаю в чем проблема (скину код где эта часть мною не тронута)
class Risovatel
{
static float x, y;
static Graphics graphics;
public static void Initialization(Graphics newGraphics)
{
graphics = newGraphics;
graphics.SmoothingMode = SmoothingMode.None;
graphics.Clear(Color.Black);
}
public static void SetPosition(float x0, float y0)
{
x = x0;
y = y0;
}
public static void MakeIt(Pen pen, double isLong, double angle)
{
//Делает шаг длиной dlina в направлении ugol и рисует пройденную траекторию
var x1 = (float)(x + isLong * Math.Cos(angle));
var y1 = (float)(y + isLong * Math.Sin(angle));
graphics.DrawLine(pen, x, y, x1, y1);
x = x1;
y = y1;
}
public static void Change(double isLong, double angle)
{
x = (float)(x + isLong * Math.Cos(angle));
y = (float)(y + isLong * Math.Sin(angle));
}
}
public class ImpossibleSquare
{
public static void Draw(int width, int height, double angleOfRotation, Graphics graphics)
{
Risovatel.Initialization(graphics);
var min = Math.Min(width, height);
var diagonalLength = Math.Sqrt(2) * (min * 0.375f + min * 0.04f) / 2;
var x0 = (float)(diagonalLength * Math.Cos(Math.PI / 4 + Math.PI)) + width / 2f;
var y0 = (float)(diagonalLength * Math.Sin(Math.PI / 4 + Math.PI)) + height / 2f;
Risovatel.SetPosition(x0, y0);
//Рисуем 1-ую сторону
Risovatel.MakeIt(Pens.Yellow, min * 0.375f, 0);
Risovatel.MakeIt(Pens.Yellow, min * 0.04f * Math.Sqrt(2), Math.PI / 4);
Risovatel.MakeIt(Pens.Yellow, min * 0.375f, Math.PI);
Risovatel.MakeIt(Pens.Yellow, min * 0.375f - min * 0.04f, Math.PI / 2);
Risovatel.Change(min * 0.04f, -Math.PI);
Risovatel.Change(min * 0.04f * Math.Sqrt(2), 3 * Math.PI / 4);
//Рисуем 2-ую сторону
Risovatel.MakeIt(Pens.Yellow, min * 0.375f, -Math.PI / 2);
Risovatel.MakeIt(Pens.Yellow, min * 0.04f * Math.Sqrt(2), -Math.PI / 2 + Math.PI / 4);
Risovatel.MakeIt(Pens.Yellow, min * 0.375f, -Math.PI / 2 + Math.PI);
Risovatel.MakeIt(Pens.Yellow, min * 0.375f - min * 0.04f, -Math.PI / 2 + Math.PI / 2);
Risovatel.Change(min * 0.04f, -Math.PI / 2 - Math.PI);
Risovatel.Change(min * 0.04f * Math.Sqrt(2), -Math.PI / 2 + 3 * Math.PI / 4);
//Рисуем 3-ю сторону
Risovatel.MakeIt(Pens.Yellow, min * 0.375f, Math.PI);
Risovatel.MakeIt(Pens.Yellow, min * 0.04f * Math.Sqrt(2), Math.PI + Math.PI / 4);
Risovatel.MakeIt(Pens.Yellow, min * 0.375f, Math.PI + Math.PI);
Risovatel.MakeIt(Pens.Yellow, min * 0.375f - min * 0.04f, Math.PI + Math.PI / 2);
Risovatel.Change(min * 0.04f, Math.PI - Math.PI);
Risovatel.Change(min * 0.04f * Math.Sqrt(2), Math.PI + 3 * Math.PI / 4);
//Рисуем 4-ую сторону
Risovatel.MakeIt(Pens.Yellow, min * 0.375f, Math.PI / 2);
Risovatel.MakeIt(Pens.Yellow, min * 0.04f * Math.Sqrt(2), Math.PI / 2 + Math.PI / 4);
Risovatel.MakeIt(Pens.Yellow, min * 0.375f, Math.PI / 2 + Math.PI);
Risovatel.MakeIt(Pens.Yellow, min * 0.375f - min * 0.04f, Math.PI / 2 + Math.PI / 2);
Risovatel.Change(min * 0.04f, Math.PI / 2 - Math.PI);
Risovatel.Change(min * 0.04f * Math.Sqrt(2), Math.PI / 2 + 3 * Math.PI / 4);
}
}
Там еще отдельный класс есть вроде как для сборки всего этого, но думаю его кидать не нужно