Ausgewogener Winkel über einer unregelmäßige zweidimensionale Punkteemenge



  • Hallo Leutchen!

    Ich habe eine zweidimensionale (empirische) Punktemenge und möchte über dieser einen ausgewognen Winkel bilden. Also, wenn die Menge = { (1, 1), (2, 1), (3, 1) } wäre, dann würde das Ergebnis 0° sein. Wäre die Punktemenge = { (1, 1), (1, 2), (1, 3) } dann wäre das Ergebnis 9°. Das ganze soll auch bei - so handelt es sich ja um eine empirische Punktemenge - einer Menge mit unregelmäßigen Punkten funktionieren.

    Zuvor dachte ich an die aus der Statistik bekannten linearen Regreßfunktion, die ich aber nach einigen herumprobieren als vollkommen ungeeignet ad acta legte! So würde sie nämlich bei einer Menge M = { (1, 1), (2, 1), (2, 2) } nicht wie gewünscht einen Winkel von 45° sondern einen von (was ja auch ganz klar ist) von 26,6°.

    Hat jemand eine Idee, wie über eine solchen empirischen zweidimensionalen Punktemenge einen ausgewogenen Winkel bilden kann?



  • ChrisPlusPlus schrieb:

    Zuvor dachte ich an die aus der Statistik bekannten linearen Regreßfunktion, die ich aber nach einigen herumprobieren als vollkommen ungeeignet ad acta legte! So würde sie nämlich bei einer Menge M = { (1, 1), (2, 1), (2, 2) } nicht wie gewünscht einen Winkel von 45° sondern einen von (was ja auch ganz klar ist) von 26,6°.

    Da liegt denke ich das Problem. Wieso sind 45° richtiger? Das entspräche doch einem Ignorieren des 2. Punktes. Warum ist das richtig und Ignorieren des 3. Punktes (=> 0°) nicht? Versuch Dir am besten mal genau zu überlegen, was Du überhaupt haben willst. Einen Ausgleich (also eine Gerade mit mittlerem kleinen Fehler willst Du ja scheinbar nicht haben.



  • suchst du eine gerade, so dass alle punkte unterhalb liegen? dann berechne einfach fuer jeden einzelnen punkt den noetigen anstieg und das maximum dieser ist dein ergebnis.



  • Zu Jester:
    Vielleicht habe ich mich etwas gaga ausgedrückt. Ich möchte, wenn ich die (unregelmäßigen) Punkte verbinde eine adäquate Tangente ermitteln. Das Beispiel mit den drei Punkten war vielleicht etwas unglücklich gewählt.

    Die Regreßfunktion kommt deshalb nicht in Betracht, weil eine Rotation der Punkte, sagen wir mal um 90°, nicht auch eine Änderung des Winkels der Regreßfunktion zur X-Achse um 90° mit sich zieht.

    Beispiel:
    M = { (1, 1), (1, 2), (2, 2) } --> Winkel der Regreßfunktion zur X-Achse = 26°

    Nun Rotiere ich die Punkte um +90° um den Punkt (1.5, 1.5) und erhalte folgende Punktemenge
    M = { (1, 1), (2, 1), (1, 2) } --> Winkel der Regreßfunktion zu X-Achse = -26° (und nicht wie benötigt 116°)

    Ich möchte die praktische Absicht erleutern, vielleicht wird meine Problematik dann klarer:
    Ich habe eine Kontur, sagen wir mal ein Quadrat oder einen Kreis. Ich möchte Punkt für Punkt an dieser Kontur entlang gehen und für jeden Punkt (p) in Abhängigkeit seiner benachbarten Punkte (... + p - 2, p - 1, p, p + 1, p + 2 + ...) eine Tangente bilden.

    Für jede ermittelte Tangente kann ich einen Normavektor errechnen und habe dann für jeden Punkt (auch wenn die Kontur unregelmäig ist) einen Normalvektor in Abhängigkeit seiner benachbarten Punkte.

    Das nämlich ist ein adäquater Weg, eine Form einer beleibigen auch unregelmäßigen Figur beschreiben zu können.



  • du koenntest jeweils genau den vorherigen und den naechsten punkt mit einbeziehen, 3 punkte legen einen kreis eindeutig fest, dann nimmst du den anstieg der tangente an diesem kreis in dem mittleren punkt als den anstieg deiner tangente bzw die verbindung vom mittelpunkt dieses kreises zum mittleren der 3 punkte als normalenvektor (zumindest richtungsmaessig).



  • Das ist eine guter Vorschlag, allerdings praktisch für mein Problem nicht anwendbar. Es stimmt, daß ein Kreis durch drei Punkte eindeutig festgelegt ist, aber so gibt es auch Punktkombinationen, die keinen Kreis zulassen, wie z. B. {(1, 1), (2, 1), (3, 1)} und mit solchen habe ich es größtenteils zu tun.

    Aber dennoch hat mich Dein Vorschlag auf eine Lösung gebracht, die ich Dir gerne vorexerzieren möchte. Ich möchte vorher aber erwähnen, daß diese Problemstellung rein praktischer Natur ist, also in einem Computerprogramm ablaufen wird.

    Wie bereits beschrieben, versuche ich die Normalvektoren eines jeden Punktes (P) einer Kontur in Abhängigkeit seiner Nachbarpunkte (die mir eine durchschnittliche Tangente der Punke zur Verfügung stellen sollen) zu ermitteln.

    Ich lege also die Schärfe (wieviele Nachbarpunkte die Tangente bilden sollen) fest und extrahiere die Teilkontur und wähle das Lexikographische Minimum als Startpunkt.

    Die Nachbarpunkte eines jeden Punktes befinden sich stets im Raster (+-1, +-1) also in einem 3 x 3 Raster und genau dieses Raster analysiere ich.

    Ein Raster mit der Punkteverteilung { (-1, -1), (0, 0), (1, 1)} hätte den Winkel 45°
    Ein Raster mit der Punkteverteilung { (-1, 0), (0, 0), 1, 0) hätte den Winkel 0°
    Ein Raster mit der Punkteverteilung { (-1, -1), (-1, 0), (0, 0), (0, 1), (1, 1) } hätte den Winkel x (muß ich mir noch errechnen.

    Ich gehe also jeden Punkt duch, ermittle mir das Raster, bilde daraus den Winkel und errechne mir hernach den Schnitt aller Winkel über die gesamte Teilkontur.

    eine sehr befriedigende Lösung, nochdazu weil sie nicht rechenintensiv ist, und in Computern ziemlich schnell ermittelt werden kann.

    Vielen Dank!



  • du hast nicht hinreichend erlaeutert, wie dir dieses raster einen winkel liefert. heisst das, es wird bei dir nur winkel geben, die entstehen koennen, wenn man zwei von 3x3 punkten irgendwie verbindet? das duerfte recht grob werden.

    sind die drei punkte kollinear, bestimmen sie natuerlich im ueblichen sinne keinen kreis (man kann eine halbebene als kreis mit unendlichem radius bezeichnen), die normale zeigt natuerlich einfach rechtwinklig zu ihnen nach aussen.



  • Zuvor sollte man wissen, daß ich die Konturen von Pixelgraphiken untersuche, ich es also nur mit ganzahlingen Werten von Koordinaten zu tun habe.

    Aber Du hast Recht, im Kleinen ist es höchst grob. Besteht jedoch eine Teilkontur aus 20 Punkten, so werden daraus 20 Raster gebildetn, die mir jeweils einen groben Winkel geben. Allerdings interessiert schlußendlich nur der Schnitt dieser aufsummierten groben Winkel!

    Ich lege eine Reihe von 3 x 3 Raster bereit, wobei der Punkt links untern = LU (-1, -1) und der Rechts oben RO = (1, 1) ist.

    Will nun zu einem Punkt der Grobwinkel ermittelt werden, so nimmt er automatisch Punkt (0, 0) ein.

    Ich lege also folgende Raster fest:
    R1 = { (0, 0), (1, 0) } --> 0°
    R2 = { {-1, 0, (0, 0), (1, 0) } --> 0°
    ...

    Rn = { (0, 0), (1, 0) } --> 90°
    Rn + 1 { (-1, 0), (0, 0), (1, 0) } --> 90°

    Für die weiteren Waagrechten und Diagonalen Punktkombinationen ergeben sich noch die folgenden Grobwinkel
    135°
    180°
    225°

    Solte ein Raster unregelmäßig mit Punkten ausgefüllt sein, so ist dies stets eine Kombination der eben angeführten (oder aus Platzgründen unterschlagenen) festgelegten Rastern.

    Aus einer Teilkontur, die eine 45°-winkelige Linie darstellt werden (klarerweise) die folgenden Grobwinkel ermittelt
    45°, 45°, ..., 45°, 45° --> summe / anzahl = 45°

    Eine etwas steilere Linie würde folgende Grobwinkel liefern
    45°, 45°, 90°, 45° .... --> summe / anzahl = 72°


Anmelden zum Antworten