2 Pluspunkte 0 Minuspunkte

Angenommen ich habe eine Linie bestehend aus 2 Punkten. Wie kann ich den Normal Vector dazu berechnen und zeichnen? Also die Linie die im rechten Winkel dazu steht.

private PointF startPoint = new PointF(100, 100);
private PointF endPoint = new PointF(300, 300);
von  

1 Antwort

0 Pluspunkte 0 Minuspunkte

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);
        }

        
    }

}
von