Estoy tratando de convertir una coordenada de un sistema de coordenadas a otro, para poder dibujarla en una imagen.
Básicamente, el sistema de coordenadas de destino es el siguiente:
X range: 0 to 1066
Y range: 0 to 1600
(solo una imagen estándar que estoy dibujando con el tamaño de 1066 x 1600)
La posición que estoy tratando de dibujar en la imagen en realidad tiene exactamente el mismo tamaño, pero el sistema de coordenadas es diferente. El alcance de todas las coordenadas es 1066x1600.
Pero un ejemplo de coordenadas sería:
(111.33f, 1408.41f)
(-212.87f, 1225.16f)
El rango de este sistema de coordenadas es:
X range: -533.333 to 533.333
Y range: 533.333 to 2133.333
Siento que esto es matemática MUY simple, pero por alguna razón no lo entiendo.
¿Cómo puedo convertir las coordenadas proporcionadas en el primer sistema de coordenadas?
2d
coordinates
Geesu
fuente
fuente
Respuestas:
Puede normalizar el primer valor, esto le dará un valor en el rango [0,1]. Puede pensar en eso como un porcentaje X, el porcentaje al que se asigna el valor entre los valores mínimo y máximo. Luego puede encontrar dónde pertenece ese porcentaje en su sistema de coordenadas de destino al ver qué valor es X porcentaje a través del sistema de destino. Usaré el código Java como lenguaje de ejemplo, estoy seguro de que los conceptos son lo suficientemente claros como para traducir a cualquier idioma.
Entonces normalizar:
Usando su ejemplo que ingresaría:
Luego encuentre dónde se encuentra en el sistema de destino. Con algo como
O para usar sus valores:
Entonces, por ejemplo, con un valor de x de 1000, asignaría eso a su sistema de coordenadas de destino
467.29
.Alternativamente , si los sistemas de coordenadas siempre serán los mismos, puede calcular previamente la relación entre ellos.
Entonces:
fuente
Es matemática simple:
src - sistema de coordenadas fuente
res - sistema de coordinación de resultados
Editar - explicación de las matemáticas
( src - src_min ) / ( src_max - src_min )
lo traduce al sistema de coordenadas comenzando en cero con igual longitud del sistema de coordenadas de origen(0.0, src_max - src_min )
. Luego escala el valor para coordinar el sistema(0.0, 1.0)
.* ( res_max - res_min )
esto escala el valor para coordinar el sistema comenzando en cero con la longitud del sistema de coordinación de resultados(0.0, dst_max - dst_min)
+ res_min
traduce el valor al sistema de coordenadas resultante(dst_min, dst_max)
fuente
La ecuación básica para la transformación de coordenadas 2D (en álgebra, sin rotación involucrada) es:
dados dos puntos en TargetCoordinate (T1, T2) que corresponde a dos puntos en SourceCoordinate (S1, S2),
TranslateFactor
yScalingFactor
se da resolviendo:cuyo resultado:
En su caso, para la coordenada x
Y por lo tanto,
coordenada y sigue el mismo procedimiento
fuente
Haciendo algunas suposiciones:
Entonces la pregunta migra a: ¿Cuál es la matriz de transformación homogénea para mi cambio de base?
Para responder esto, primero necesitamos las respuestas a tres consultas subsidiarias:
Defina las respuestas a estas tres preguntas de la siguiente manera:
Entonces la matriz de transformación homogénea es:
Mi convención aquí es que los puntos están representados por vectores de fila, que es la convención gráfica de computadora normal; Los matemáticos y físicos a menudo usan el oppsoite.
fuente