Dazu kannst du eine kleine Funktion schreiben.
PointF startPoint = new PointF(100, 100);
PointF endPoint = new PointF(300, 300);
// Berechne die Differenz der Punkte
float dx = endPoint.X - startPoint.X;
float dy = endPoint.Y - startPoint.Y;
// Berechne die Normalenkomponenten
float normalX = -dy;
float normalY = dx;
// Normalisiere die Normale
float length = (float)Math.Sqrt(normalX * normalX + normalY * normalY);
normalX /= length;
normalY /= length;
PointF normal = new PointF(normalX, normalY);
Hier ist ein Beispiel
using System.Drawing;
using System.Windows.Forms;
using System;
namespace Test
{
public partial class Form1 : Form
{
private PointF startPoint = new PointF(100, 100);
private PointF endPoint = new PointF(300, 300);
public Form1()
{
this.Paint += MainForm_Paint;
}
private void MainForm_Paint(object sender, PaintEventArgs e)
{
// Zeichne die Linie
e.Graphics.DrawLine(Pens.Black, startPoint, endPoint);
// Berechne die Normalen
PointF normal = CalculateNormal(startPoint, endPoint);
// Zeichne die Normale
e.Graphics.DrawLine(Pens.Red, startPoint, new PointF(startPoint.X + normal.X * 20, startPoint.Y + normal.Y * 20));
}
private PointF CalculateNormal(PointF start, PointF end)
{
// Berechne die Differenz der Punkte
float dx = end.X - start.X;
float dy = end.Y - start.Y;
// Berechne die Normalenkomponenten
float normalX = -dy;
float normalY = dx;
// Normalisiere die Normale
float length = (float)Math.Sqrt(normalX * normalX + normalY * normalY);
normalX /= length;
normalY /= length;
// Gib die Normalenkomponenten zurück
return new PointF(normalX, normalY);
}
}
}