Gegeben ist eine Menge an Messpunkten in der Ebene, welche eine Linie darstellen. Nun suche ich einen Algorithmus (den ich dann implementieren will), welcher mir die beschriebene Strecke (Mittelpunkt und Winkel oder die beiden Enden) liefert. Deren Länge ist übrigens bekannt.
Meine mathematische Bildung lässt mich in diesem Bereich etwas im Stich (eine Funktion durch n Stützpunkte zu legen ginge gerade noch).
ggf. muss ich die Funktion von „_“ auch auf etwas komplexere Formen wie „^“ oder „E“ erweitern (immer mit bekannten Dimensionen). Benötigt wird am Schluss die Position und die Orientierung.
Dann ist es einfach: Suche die beiden Punkte mit a) dem größten und b) dem kleinsten x-Wert. Fertig. Sollten mehrere (im Falle der Geraden sind es dann alle) Punkte den selben x-Wert haben, dann nimmst Du die y-Werte.
Liegen die Punkte nicht auf einer Geraden, weiß ich nicht so recht, was Mittelpunkt und Winkel dabei sollen.
Grün ist gegeben, rot ist gesucht. Die grünen MESSpunkte sollen die Linie darstellen, tun sie wegen Messfehlern natürlich nicht genau. Ein Algorithmus soll daraus nun möglichst präzise die Position und die Orientierung (Länge ist ja bekannt) der ursprünglichen Linie berechnen.
Später soll das wie erwähnt ev. auch mit komplexeren (bekannten) Formen gehen.
Ist das vielleicht eher ein Fall fürs „Programmieren allgemein“ Forum?
bei statistisch normalverteilten Messwerten ist die passende Randbedingung „Summe der Quadrate der Residuen soll minimal sein“. Dann ist die Ausgleichsgerade eindeutig bestimmt, und mit Hilfe der sogenannten linearen Regression kannst Du sie ausrechnen (Steigung b plus y-Achsen-Abschnitt a):
X = 1/n Σ xk (= arithmetisches Mittel aller x-Werte)
Y = 1/n Σ yk (= arithmetisches Mittel aller y-Werte)
b = Σ (xk – X) (yk – Y) / Σ (xk – X)2
a = Y – b X
(alle Summen laufen von k = 1 … n)
Die gesuchte Ausgleichsgerade hat die Funktionsgleichung y(x) = a + b x.
mx = Mittelwert aus allen x-Koordinaten
my = Mittelwert aus allen y-Koordinaten
Den Winkel bekommst du aus der Steigung. Die Steigung berechnet sich etwas komplizierter (s.a. Wiki-Seite):
Für jeden Punkt Pi = (xi|yi) (i = 1 … Anzahl Punkte) berechne
Sxyi = (xi - mx) * (yi - my)
Sxxi = (xi - mx)²
Addiere alle Sxy-Werte zu SSxy und
addiere alle Sxx-Werte zu SSxx.
Der Quotient SSxy/SSxx ist dann die Steigung.
Die Steigung ist gleich dem Tangens des Winkels zwischen der Geraden und der Horizontalen. Den Winkel bekommt man also als Arcustangens der Steigung: alpha = atan(SSxy/SSxx)
Wenn der Winkel negativ ist, musst du 90°-alpha rechnen, um wieder den Winkel zur Horizontalen zu bekommen.
Achte darauf, dass man im Bogenmaß und im Gradmaß rechnen kann. 180° im Gradmaß sind Pi im Bogenmaß.
Vielen Dank euch beiden, klappt prima…
Die Winkelabweichungen sind gering, nur die Positionsabweichungen werden je nach Lage relativ gross. Gibt es da ev. noch bessere Verfahren für die Positionsbestimmung als einfach den Mittelwert?