ich habe ein Setup wie folgt aus:wie Transformation i zwischen einem statischen und einem dynamischen Koordinatensystem
2 Koordinatensysteme. (x, y) ist das Hauptkoordinatensystem und (x ', y') ist ein Koordinatensystem, das innerhalb (x, y) lebt. Das System (x ', y') wird durch die Punkte x1 oder x2 definiert, und wenn ich diese 2 Punkte umherbewege, bewegt sich (x ', y') entsprechend. Der Ursprung von (x ', y') ist definiert als die Mitte des Vektors, der von x1 nach x2 geht, und die y'-Achse ist der normale Vektor auf x1-> x2, der durch den Ursprung geht. Wenn ich einen Punkt x3 in (x ', y') definiert habe und ich entweder x1 oder x2 verschiebe, um den Ursprungsverschiebungsort zu erstellen, wie verschiebe ich dann x3 entsprechend, so dass es seine Position im neuen (x ') behält, y ')? Und wie mache ich eine Transformation, die immer einen Punkt in (x, y) in einen Punkt in (x ', y') umwandelt, wie x1 und x2 gesetzt wurden?
Ich dachte, dass, wenn ich mehr Punkte hatte, als nur die, die ich (x1 oder x2) bewege i i Theta zu schätzen erraten könnte versuchen, tx, ty der Transformation
[x2'] [cos(theta) , sin(theta), tx][x2]
[y2'] = [-sin(theta), cos(theta), ty][y2]
[ 1 ] [ 0 , 0 , 1 ][1 ]
und gelten nur diese geschätzte Transformation zu x3 und ich wäre gut ... mmm, aber ich denke, ich würde 3 Punkte brauchen, um Theta, Tx und Ty richtig zu schätzen? Ich meine, ich könnte schätzen, einige der kleinsten Quadrate Ansatz verwenden ... aber 3 Unbekannte erfordert 3 Koordinatensätze richtig?
Ich habe versucht, dies zu implementieren und ein Beispiel zu berechnen. Ich hoffe du verstehst die Syntax. Es ist nicht wirklich mir geben, was ich erwarte:
import math
import numpy as np
x1=[ 0,10]
x2=[10,20]
rx = x2[0] - x1[0]
ry = x2[1] - x1[1]
rlen = math.sqrt(rx*rx+ry*ry)
c = rx/rlen
s = ry/rlen
dx = - (x1[0] + x2[0])/2 # changing the sign to be negative seems to
dy = - (x1[1] + x2[1])/2 # rectify translation. Rotation still is wrong
M = np.array([[c, -s, 0],[s, c, 0],[dx, dy, 1]])
print(np.dot(x2 + [1],M))
# Yields -> [ 15.92031022 -8.63603897 1. ] and should yield [5,0,1]
Da ich versuche, die x2-Koordinate zu verwandeln, sollte das Ergebnis dann nicht den Wert 0, da seine in der x-Achse in der y-Komponente hat?
Ok, ich habe versucht, die Implementierung für x3 von Dynamic1 zu Dynamic2, die die Prüfung ist, dass X3 sollte mit der gleichen Koordinate in beiden d1 und d2 enden. Ich habe das gemacht, wie Sie vorgeschlagen haben, aber ich bekomme nicht die gleiche Koordinate in d1 und d2. Habe ich etwas falsch verstanden?
import math
import numpy as np
x1=[ 1,1]
x2=[ 7,9]
x3=[4,3]
rx = (x2[0] - x1[0])
ry = (x2[1] - x1[1])
rlen = math.sqrt(rx*rx + ry*ry)
c = rx/rlen
s = ry/rlen
dx = (x1[0] + x2[0])/2
dy = (x1[1] + x2[1])/2
M = np.array([[c, -s, 0],[s, c, 0],[-dx*c-dy*s, dx*s-dy*c, 1]])
Minv = np.array([[c, s, 0],[-s, c, 0],[dx, dy, 1]])
x1new=[ 1,1]
x2new=[ 17,4]
rxnew = (x2new[0] - x1new[0])
rynew = (x2new[1] - x1new[1])
rlennew = math.sqrt(rxnew*rxnew + rynew*rynew)
cnew = rxnew/rlennew
snew = rynew/rlennew
dxnew = (x1new[0] + x2new[0])/2
dynew = (x1new[1] + x2new[1])/2
Mnew = np.array([[cnew, -snew, 0],[snew, cnew, 0],[-dxnew*cnew-dynew*snew, dxnew*snew-dynew*cnew, 1]])
Mnewinv = np.array([[cnew, snew, 0],[-snew, cnew, 0],[dxnew, dynew, 1]])
M_dyn1_to_dyn2 = np.dot(Minv,Mnew)
print(np.dot(x3 + [1], M))
print(np.dot(x3 + [1], M_dyn1_to_dyn2))
#yields these 2 outputs which should be the same:
[-1.6 -1.2 1. ]
[-3.53219692 8.29298408 1. ]
Sie versuchen, es zu speichern können doppelte Dimension Array verwenden dan können Sie leicht – keronconk
seinen Wert ändern elabor etwas mehr gegessen? Ich bin mir nicht sicher, ob ich dir wirklich folge. – plaindev