Du kannst die neuen Koordinaten des Endpunktes mit einfachen trigonometrischen Funktionen nach dem Satz des Pythagoras berechnen.
- Übersetze den Ursprung des Koordinatensystems so, dass der Drehpunkt im Ursprung liegt.
- Rotiere den Punkt um den Ursprung.
- Übersetze den Ursprung zurück an seine ursprüngliche Position.
float angleRadians = (float)(angleDegrees * Math.PI / 180.0);
float newX = (float)(Math.Cos(angleRadians) * (point.X - rotationPoint.X) - Math.Sin(angleRadians) * (point.Y - rotationPoint.Y) + rotationPoint.X);
float newY = (float)(Math.Sin(angleRadians) * (point.X - rotationPoint.X) + Math.Cos(angleRadians) * (point.Y - rotationPoint.Y) + rotationPoint.Y);
Das Prinzip des Pythagoras wird verwendet, um die Längen der Seiten im rechtwinkligen Dreieck zu berechnen, das durch die Bewegung des Punktes entsteht. Hier ist ein Beispiel dazu.
using System;
using System.Drawing;
using System.Windows.Forms;
class Program
{
    static void Main(string[] args)
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MyForm());
    }
}
public class MyForm : Form
{
    private PointF startPoint = new PointF(200, 200);
    private PointF endPoint = new PointF(200, 0);
    private PointF rotationPoint = new PointF(200, 200);
    public MyForm()
    {
        this.Size = new Size(420, 440);
        this.Paint += MyForm_Paint;
    }
    private void MyForm_Paint(object sender, PaintEventArgs e)
    {
        RotateLine(0.03f);
        e.Graphics.DrawLine(Pens.Black, startPoint, endPoint);
    }
    private void RotateLine(float degrees)
    {
        float angleRadians = (float)(degrees * Math.PI / 180.0);
        
        PointF newEndPoint = RotatePoint(endPoint, rotationPoint, angleRadians);
        
        endPoint = newEndPoint;
        
        this.Invalidate();
    }
    private PointF RotatePoint(PointF point, PointF rotationPoint, float angleRadians)
    {    
        float newX = (float)(Math.Cos(angleRadians) * (point.X - rotationPoint.X) - Math.Sin(angleRadians) * (point.Y - rotationPoint.Y) + rotationPoint.X);
        float newY = (float)(Math.Sin(angleRadians) * (point.X - rotationPoint.X) + Math.Cos(angleRadians) * (point.Y - rotationPoint.Y) + rotationPoint.Y);
        
        return new PointF(newX, newY);
    }
}