Ich versuche, eine Koordinate von einem Koordinatensystem in ein anderes zu konvertieren, damit ich sie auf ein Bild zeichnen kann.
Grundsätzlich lautet das Zielkoordinatensystem wie folgt:
X range: 0 to 1066
Y range: 0 to 1600
(Nur ein Standardbild mit einer Größe von 1066 x 1600)
Die Position, die ich auf das Bild zeichnen möchte, hat tatsächlich genau die gleiche Größe, aber das Koordinatensystem ist unterschiedlich. Die Spannweite aller Koordinaten beträgt 1066 x 1600.
Ein Koordinatenbeispiel wäre jedoch:
(111.33f, 1408.41f)
(-212.87f, 1225.16f)
Der Bereich dieses Koordinatensystems ist:
X range: -533.333 to 533.333
Y range: 533.333 to 2133.333
Ich denke, das ist SEHR einfache Mathematik, aber aus irgendeinem Grund verstehe ich es nicht.
Wie kann ich die angegebenen Koordinaten in das erste Koordinatensystem konvertieren?
2d
coordinates
Geesu
quelle
quelle
Antworten:
Sie können den ersten Wert normalisieren. Dadurch erhalten Sie einen Wert im Bereich [0,1]. Sie können sich das als X-Prozentsatz vorstellen, den Prozentsatz, dem der Wert zwischen dem Minimal- und dem Maximalwert zugeordnet ist. Dann können Sie herausfinden, wo dieser Prozentsatz in Ihr Zielkoordinatensystem gehört, indem Sie im Zielsystem sehen, welcher Wert X Prozent ist. Ich werde Java-Code als Beispielsprache verwenden. Ich bin sicher, dass die Konzepte klar genug sind, um in jede Sprache übersetzt zu werden.
Also normalisieren:
Anhand Ihres Beispiels würden Sie Folgendes eingeben:
Finden Sie dann heraus, wo es im Zielsystem liegt. Mit so etwas wie
Oder um Ihre Werte zu verwenden:
Mit einem x-Wert von 1000 würden Sie dies beispielsweise Ihrem Zielkoordinatensystem zuordnen
467.29
.Wenn die Koordinatensysteme immer gleich sind, können Sie alternativ das Verhältnis zwischen ihnen vorberechnen.
Damit:
quelle
Es ist einfache Mathematik:
src - Quellkoordinatensystem
Res - Ergebniskoordinationssystem
Bearbeiten - Erklärung der Mathematik
( src - src_min ) / ( src_max - src_min )
übersetzt es in ein Koordinatensystem, das bei Null mit der gleichen Länge des Quellkoordinatensystems beginnt(0.0, src_max - src_min )
. Dann skaliert es den Wert zum Koordinatensystem(0.0, 1.0)
.* ( res_max - res_min )
Dies skaliert den Wert für das Koordinatensystem beginnend bei Null mit der Länge des Ergebniskoordinationssystems(0.0, dst_max - dst_min)
+ res_min
übersetzt den Wert in das Ergebniskoordinatensystem(dst_min, dst_max)
quelle
Die Grundgleichung für die 2D-Koordinatentransformation (in der Algebra ohne Rotation) lautet:
gegeben zwei Punkte in TargetCoordinate (T1, T2), die zwei Punkten in SourceCoordinate (S1, S2) entsprechen,
TranslateFactor
undScalingFactor
gegeben durch Lösen:welches Ergebnis:
In Ihrem Fall für die x-Koordinate
Und somit,
y-Koordinaten folgen dem gleichen Verfahren
quelle
Einige Annahmen treffen:
Dann wandert die Frage zu: Was ist die homogene Transformationsmatrix für meine Basisänderung?
Um dies zu beantworten, benötigen wir zuerst die Antworten auf drei Nebenfragen:
Definieren Sie die Antworten auf diese drei Fragen wie folgt:
Dann ist die homogene Transformationsmatrix:
Meine Konvention hier ist, dass Punkte durch Zeilenvektoren dargestellt werden, was die normale Computergrafikkonvention ist; Die Mathematiker und Physiker verwenden oft das Gegenteil.
quelle