Frage : Das Übersetzen koordiniert von einem beigeordneten System zu anderen

Auf einem Blatt Papier:
The X Koordinate erhöht von links nach rechts
The y-Koordinatezunahmen von oben bis unten
(0.0) ist am obersten linken corner.

I haben zwei Punkte auf diesem Blatt: (x1, y1) und (x2, y1) (d.h., sind sie beide auf der gleichen horizontalen Linie), fotokopieren

I jetzt dieses Blatt. Während des Photokopierens drehen sich das ursprüngliche Papier, das etwas und verschoben wird auch, etwas. Infolgedessen wurden meine zwei ursprünglichen Punkte jetzt (auf diesem neuen Blatt Papier):
(x3, y3) und (x4, y4). das

Now, irgendeinen Punkt (a1, b1) auf dem ursprünglichen Blatt Papier gegeben, was würden seine Koordinaten auf dem neuen Blatt Papier sein?

I dachte, dass ich das korrekte formulat für dieses abgeleitet hatte, aber ich immer scheine, einige Pixel off.

Thanks.
zu sein

Antwort : Das Übersetzen koordiniert von einem beigeordneten System zu anderen

Sie abgeleitet vermutlich bereits die korrekten Gleichungen n, aber uns lassen durchlaufen es irgendwie.

Sie wünschen eine steife Umwandlung, die (x1, y1) (x3, y3) übersetzt, und (x2, y1) zu (x4, y4).

Wir können an die steife Umwandlung als Übersetzung denken, gefolgt von einer Umdrehung.  Wir beginnen mit einer Übersetzung, die (x1, y1) bewegt auf (x3, y3).  Dieses ist einfach:

(a, B) ---> (a + x3 - x1, b + y3 - y1)

tut den Trick.

Jetzt wünschen wir eine Umwandlung, der um den Punkt (x3, y3) damit der Punkt ursprünglich an (x2, y1) dreht, das vorbei abgebildet worden (x2 + x3 - x1, y3), dreht vorbei zu (x4, y4).

Uns den Winkel dieser Umdrehung ausarbeiten lassen.  Zurückrufen dass die Richtung eines Vektors (x, y) kann durch das atan2 (y festgestellt werden, x) Funktion (die meisten mathematischen Bibliotheken haben ein atan2, das den Quadranten des Vektors sowie sein arctan feststellt - verwenden nicht das einfache atan (y/x) Funktion für dieses).

So ist die Gesamtumdrehung gerade der Unterschied zwischen den zwei eckigen Richtungen, der ist

Theta = atan2 (y4 - y3, x4 - x3) - atan2 (x2 - x1, 0)

(daran erinnern, dass wir Vektoren benötigen, die am Punkt (x3, y3) beginnen, also muss dieser von beiden der Punkte subtrahiert werden).

O.K. jetzt anwenden wir einfach einen Umdrehungsbetrieb.

(c, d) -----> (c * Lattich (Theta) - d * Sünde (Theta), c * Sünde (Theta) + d * Lattich (Theta))

wo (c, d) = (a + x3 - x1, b + y3 - y1), von vorher.


Wenn Sie finden, dass Sie durch einige Pixel nahe dem Rand Ihres Bildes aus sein konnten, leiden Sie unter einem Entschließungproblem: die zutreffenden Positionen Ihrer zwei Punkte sind nicht wirklich (x3, y3) und (x4, y4), aber die sind gerade koordiniert das nähste.  Dieses beeinflußt nicht die Übersetzung, da die gleiche (Vor-pixel) Störung gerade während des Bildes fortgepflanzt erhält.  Aber für die Umdrehung, könnte eine kleine Störung in der Umdrehung nahe (x4, y4) zu eine größere Störung weit weg machen.  Im Allgemeinen ist die Störung etwas um die Entschließung Ihres Bildes, das durch ABS (x2 - x1) geteilt.  Wenn x2 und x1 zusammen nah sind, können Sie sehen, warum Sie durch einige Pixel aus sein konnten.

Es gibt wirklich keine gute Weise, für dieses zu beheben, anders als das Erhalten genauer koordiniert für (x3, y3) und (x4, y4), oder, Kartenaufnahmen für mehr als zwei Punkte erhalten, und einen besten Sitz auf der Übersetzung und der Umdrehung tuend, die Sie wünschen.

Hoffen, dass dieses hilft!
Weitere Lösungen  
 
programming4us programming4us