Действия над многоугольником

200
17 апреля 2017, 02:52

Мне надо нарисовать с помощью кликов на форме многоугольник Я многоугольник нарисовал. И надо сделать над ним следующие действия:

  1. Повернуть его около неподвижной точки

  2. Маштабировать его

  3. Зеркально отобразить его

Далее код рисования многоугольника

int count, num_Tochka;
Graphics gr;
Point[] pt;
double sum;
double d;
bool move_Tochka;
Pen pen_shtrih;
Pen pen_lastik;
Pen pen_base;
double DistanceTo(int i)
{
    double d;
    d = (pt[i].X - pt[i+1].X) * (pt[i].X - pt[i+1].X) + (pt[i].Y - pt[i+1].Y) * (pt[i].Y - pt[i+1].Y);
    return Math.Sqrt(d);
    //   return d;
}
double Perimetr()
{
    for (int i = 0; i < count-1; i++)
    {
        sum += DistanceTo(i);
        //sum += Math.Sqrt(Math.Pow((pt[i + 1].X – pt[i].X), 2) + Math.Pow((pt[i + 1].Y - pt[i].Y), 2));
    }
    d = (pt[0].X - pt[count -1].X) * (pt[0].X - pt[count -1].X) + (pt[0].Y - pt[count -1].Y) * (pt[0].Y - pt[count -1].Y);
    sum +=  Math.Sqrt(d);
    return sum;
}
private void button1_Click(object sender, EventArgs e)
{
    gr.Clear(Color.White);
    Array.Resize(ref pt, 1);
    count = 0;
    move_Tochka = false;
}
private void Form1_Load(object sender, EventArgs e)
{
    gr = pictureBox1.CreateGraphics();
    pen_base = new Pen(Color.Tomato, 3);
    pen_lastik = new Pen(Color.White, 3);
}
private void pictureBox1_Click(object sender, EventArgs e)
{
}
private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
{
    if (move_Tochka != true)
    {
         pt[count] = e.Location;
         listBox1.Items.Add(pt[count]);
         gr.FillEllipse(Brushes.Black, pt[count].X - 2, pt[count].Y - 2, 5, 5);
         count += 1;
         Array.Resize(ref pt, count + 1);
    }
}
private void pictureBox1_DoubleClick(object sender, EventArgs e)
{
}
private void pictureBox1_MouseDoubleClick(object sender, MouseEventArgs e)
{
    Array.Resize(ref pt, count);
    gr.DrawPolygon(pen_base, pt);
}
private void button2_Click(object sender, EventArgs e)
{
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
    for (int i = 0; i < count; i++)
    {
         if((Math.Abs(pt[i].X-e.X)<=5)&&((Math.Abs(pt[i].Y-e.Y)<=5)))
         {
              num_Tochka = i;
              move_Tochka = true;
         }
    }
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
    if(move_Tochka&e.Button == MouseButtons.Left)
    {
         gr.DrawPolygon(pen_lastik, pt);
         pt[num_Tochka] = e.Location;
         gr.DrawPolygon(pen_base, pt);
         label1.Text = "perimetr = " + Math.Round(Perimetr(), 2);
    }
}
READ ALSO
Написание консольного приложение на C# для Android

Написание консольного приложение на C# для Android

Здравствуйте, заинтересовался вопросом создания консольного приложения на C# для android, скажите пожалуйста, каким образом это можно сделать

238
Улучшение копирования файлов

Улучшение копирования файлов

Нужно ли использовать TaskFactory

216
Как правильно составить запрос xpath?

Как правильно составить запрос xpath?

Использую htmlagilitypackНеобходимо вытащить ссылку и перейти по ней

212