Advertisement
Teammasik

lr1_kg_funcs

Apr 4th, 2023
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.10 KB | None | 0 0
  1. using Microsoft.VisualBasic;
  2. using System;
  3. using System.Drawing;
  4. using System.Dynamic;
  5. using System.Reflection.Metadata;
  6.  
  7. namespace WinFormsAppPr2
  8. {
  9.     public partial class Form1 : Form
  10.     {
  11.         public Form1()
  12.         {
  13.             InitializeComponent();
  14.         }
  15.  
  16.         private const int WWidth = 1280;
  17.  
  18.         private const int WHeight = 720;
  19.  
  20.         private const int XCenter = 640;
  21.  
  22.         private const int YCenter = 360;
  23.  
  24.         private Graphics graphics;
  25.  
  26.         private Figure original = new();
  27.  
  28.         private Figure figure = new();
  29.  
  30.         private Pen pen = new(Color.Black,3);
  31.  
  32.         private Point[] points =
  33.         {
  34.             new Point(XCenter + 100, YCenter),
  35.             new Point(XCenter, YCenter - 100),
  36.             new Point(XCenter, YCenter - 30),
  37.             new Point(XCenter - 100, YCenter - 30),
  38.             new Point(XCenter - 100, YCenter + 30),
  39.             new Point(XCenter, YCenter + 30),
  40.             new Point(XCenter, YCenter + 100),
  41.             new Point(XCenter + 100, YCenter),
  42.         };
  43.         private Point[] FirstPoints =
  44.         {
  45.             new Point(XCenter + 100, YCenter),
  46.             new Point(XCenter, YCenter - 100),
  47.             new Point(XCenter, YCenter - 30),
  48.             new Point(XCenter - 100, YCenter - 30),
  49.             new Point(XCenter - 100, YCenter + 30),
  50.             new Point(XCenter, YCenter + 30),
  51.             new Point(XCenter, YCenter + 100),
  52.             new Point(XCenter + 100, YCenter),
  53.         };
  54.         private Point[] TempPoints =
  55.         {
  56.             new Point(XCenter + 100, YCenter),
  57.             new Point(XCenter, YCenter - 100),
  58.             new Point(XCenter, YCenter - 30),
  59.             new Point(XCenter - 100, YCenter - 30),
  60.             new Point(XCenter - 100, YCenter + 30),
  61.             new Point(XCenter, YCenter + 30),
  62.             new Point(XCenter, YCenter + 100),
  63.             new Point(XCenter + 100, YCenter),
  64.         };
  65.  
  66.  
  67.         public class Figure
  68.         {
  69.             public void DrawArrow(Graphics graphics, Pen pen, Point[] points)
  70.             {
  71.                 graphics.DrawLines(pen, points);
  72.             }
  73.         }
  74.  
  75.         private void MoveXY(int x, int y)
  76.         {
  77.             for (int i = 0; i < 8; i++)
  78.             {
  79.                 points[i].X += x;
  80.                 points[i].Y += y;
  81.             }
  82.             ClearScreen();
  83.             figure.DrawArrow(graphics, pen, points);
  84.  
  85.         }
  86.         private void ToMirrorByOX()
  87.         {
  88.             for (int i = 0; i < 8; i++)
  89.             {
  90.                 points[i].Y = 2 * YCenter-points[i].Y;
  91.             }
  92.             ClearScreen();
  93.             figure.DrawArrow(graphics, pen, points);
  94.         }
  95.         private void ToMirrorByOY()
  96.         {
  97.             for (int i = 0; i < 8; i++)
  98.             {
  99.                 points[i].X = 2 * XCenter - points[i].X;
  100.             }
  101.             ClearScreen();
  102.             figure.DrawArrow(graphics, pen, points);
  103.         }
  104.  
  105.         private void ToMirrorByXY()
  106.         {
  107.             int temp;
  108.             for (int i = 0; i < 8; i++)
  109.             {
  110.                 temp = points[i].X;
  111.                 points[i].X = -points[i].Y + XCenter + YCenter;
  112.                 points[i].Y = -temp + XCenter + YCenter;
  113.             }
  114.             ClearScreen();
  115.             figure.DrawArrow(graphics, pen, points);
  116.         }
  117.  
  118.         private void ToScale(double x, double y)
  119.         {
  120.             for (int i = 0; i < 8; i++)
  121.             {
  122.                 points[i].X = (int)Math.Round((points[i].X - XCenter) * x) + XCenter;
  123.                 points[i].Y = (int)Math.Round((points[i].Y - YCenter) * y) + YCenter;
  124.             }
  125.             ClearScreen();
  126.             figure.DrawArrow(graphics, pen, points);
  127.         }
  128.         private void ToRotate(Point point, double val)
  129.         {
  130.             for (int i = 0; i < 8; i++)
  131.             {
  132.                 points[i].X -= point.X;
  133.                 points[i].Y -= point.Y;
  134.                 TempPoints[i].X = (int)Math.Round(points[i].X * Math.Cos(val) - points[i].Y * Math.Sin(val)) + point.X;
  135.                 TempPoints[i].Y = (int)Math.Round(points[i].X * Math.Sin(val) + points[i].Y * Math.Cos(val)) + point.Y;
  136.             }
  137.             ClearScreen();
  138.             figure.DrawArrow(graphics, pen, TempPoints);
  139.         }
  140.  
  141.         private void ReturnToOriginal()
  142.         {
  143.             ClearScreen();
  144.             figure.DrawArrow(graphics, pen, FirstPoints);
  145.             Array.Copy(FirstPoints, 0, points, 0, FirstPoints.Length);
  146.         }
  147.  
  148.         private void DrawGrid()
  149.         {
  150.             int offset = 20;
  151.             int posX = 0;
  152.             int posY = 0;
  153.             while (posX < WWidth)
  154.             {
  155.                 graphics.DrawLine(Pens.Gray, posX, posY, posX, WHeight);
  156.                 posX += offset;
  157.             }
  158.             posX = 0;
  159.             while (posY < WHeight)
  160.             {
  161.                 graphics.DrawLine(Pens.Gray, posX, posY, WWidth, posY);
  162.                 posY += offset;
  163.             }
  164.             Pen p = new Pen(Color.Black, 2);
  165.             graphics.DrawLine(p, 0, WHeight / 2, WWidth, WHeight / 2);
  166.             graphics.DrawLine(p, WWidth / 2, 0, WWidth / 2, WHeight);
  167.         }
  168.  
  169.         private void ClearScreen()
  170.         {
  171.             graphics.Clear(BackColor);
  172.             DrawGrid();
  173.         }
  174.  
  175.         private void StartButton_Click(object sender, EventArgs e)
  176.         {
  177.             graphics = CreateGraphics();
  178.             StartButton.Dispose();
  179.             DrawGrid();
  180.             original.DrawArrow(graphics, pen, points);
  181.         }
  182.  
  183.         private void label1_Click(object sender, EventArgs e)
  184.         {
  185.  
  186.         }
  187.  
  188.         private void buttonMove_Click(object sender, EventArgs e)
  189.         {
  190.             int newX = Convert.ToInt32(InputX.Text);
  191.             int newY = -Convert.ToInt32(InputY.Text);
  192.             MoveXY(newX, newY);
  193.         }
  194.         private void buttonRefOX_Click(object sender, EventArgs e)
  195.         {
  196.             ToMirrorByOX();
  197.         }
  198.  
  199.         private void buttonRefOY_Click(object sender, EventArgs e)
  200.         {
  201.             ToMirrorByOY();
  202.         }
  203.  
  204.         private void buttonRefXY_Click(object sender, EventArgs e)
  205.         {
  206.             ToMirrorByXY();
  207.         }
  208.  
  209.         private void ToScaleClick(object sender, EventArgs e)
  210.         {
  211.            
  212.             double SclX = Convert.ToDouble(ScaleX.Text);
  213.             double SclY = Convert.ToDouble(ScaleY.Text);
  214.             ToScale(SclX, SclY);
  215.         }
  216.  
  217.         private void ToRotate_Click(object sender, EventArgs e)
  218.         {
  219.             Array.Copy(FirstPoints, 0, points, 0, FirstPoints.Length);
  220.             double val = (Convert.ToDouble(AngleInput.Text) * Math.PI) / 180;
  221.             int RotateX = Convert.ToInt32(XRotateInput.Text);
  222.             int RotateY = Convert.ToInt32(YRotateInput.Text);
  223.             Point RotationPoint = new Point(RotateX + XCenter, -RotateY + YCenter);
  224.            
  225.             ToRotate(RotationPoint, val);
  226.         }
  227.  
  228.         private void ReturnToOrig_Click(object sender, EventArgs e)
  229.         {
  230.             ReturnToOriginal();
  231.         }
  232.     }
  233. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement