private void tTurn_Scroll object sender EventArgs самый сок поворот in

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
private void tTurn_Scroll(object sender, EventArgs e) // самый сок: поворот
{
int a = tTurn.Value; // запомнили значение каретки
if (touchPoint != -1 && touchKey == -1) // Если поворачиваем кривую, которая лежит в листе, то
{
for (int i = 0; i < list.Count; i++) // формула тебе известна же
{
if (i != touchPoint) // touchPoint - точка вокруг которой вертим, х0, у0
list[i] = new Point((int)(-Math.Sin(a) * (list[i].Y - list[touchPoint].Y) + Math.Cos(a) * (list[i].X - list[touchPoint].X) + list[touchPoint].X),
(int)(Math.Cos(a) * (list[i].Y - list[touchPoint].Y) + Math.Sin(a) * (list[i].X - list[touchPoint].X) + list[touchPoint].Y));
}
}
if (touchPoint != -1 && touchKey != -1) // тут вертим весь рисунок
{
for (int j = 0; j < pointList.Count; j++)
{
for (int i = 0; i < pointList[j].Count; i++)
{
if (pointList[j][i] != pointList[touchKey][touchPoint]) // pointList[touchKey][touchPoint] - точка вокруг которой вертим, х0, у0
pointList[j][i] = new Point((int)(-Math.Sin(a) * (pointList[j][i].Y - pointList[touchKey][touchPoint].Y) + Math.Cos(a) * (pointList[j][i].X - pointList[touchKey][touchPoint].X) + pointList[touchKey][touchPoint].X),
(int)(Math.Cos(a) * (pointList[j][i].Y - pointList[touchKey][touchPoint].Y) + Math.Sin(a) * (pointList[j][i].X - pointList[touchKey][touchPoint].X) + pointList[touchKey][touchPoint].Y));
}
}
}
// Оба эти условия не выполняются одновременно, они похожи, но работают для разных случаев.
pictureBox1.Invalidate();
}