J'essaie de convertir une coordonnée d'un système de coordonnées à un autre, afin de pouvoir la dessiner sur une image.
Fondamentalement, le système de coordonnées de destination est le suivant:
X range: 0 to 1066
Y range: 0 to 1600
(juste une image standard sur laquelle je dessine avec une taille de 1066 x 1600)
La position que j'essaie de dessiner sur l'image a en fait exactement la même taille, mais le système de coordonnées est différent. L'étendue de toutes les coordonnées est de 1066x1600.
Mais un exemple de coordonnées serait:
(111.33f, 1408.41f)
(-212.87f, 1225.16f)
La plage de ce système de coordonnées est:
X range: -533.333 to 533.333
Y range: 533.333 to 2133.333
J'ai l'impression que ce sont des calculs TRÈS simples, mais pour une raison quelconque, je ne comprends pas.
Comment puis-je convertir les coordonnées fournies dans le premier système de coordonnées?
2d
coordinates
Geesu
la source
la source
Réponses:
Vous pouvez normaliser la première valeur, cela vous donnera une valeur dans la plage [0,1]. Vous pouvez considérer cela comme un pourcentage X, le pourcentage auquel la valeur correspond entre les valeurs minimale et maximale. Ensuite, vous pouvez trouver où ce pourcentage appartient dans votre système de coordonnées de destination en voyant quelle valeur est le pourcentage X via le système de destination. J'utiliserai du code Java comme exemple de langage, je suis sûr que les concepts sont suffisamment clairs pour être traduits dans n'importe quel langage.
Alors normalisez:
En utilisant votre exemple, vous saisiriez:
Trouvez ensuite où il se trouve dans le système de destination. Avec quelque chose comme
Ou pour utiliser vos valeurs:
Ainsi, par exemple, avec une valeur x de 1000, vous devez mapper cela à votre système de coordonnées de destination
467.29
.Alternativement , si les systèmes de coordonnées seront toujours les mêmes, vous pouvez pré-calculer le rapport entre eux.
Alors:
la source
C'est un calcul simple:
src - système de coordonnées source
res - système de coordination des résultats
Edit - explication des mathématiques
( src - src_min ) / ( src_max - src_min )
le traduit en système de coordonnées commençant à zéro avec une longueur égale de système de coordonnées source(0.0, src_max - src_min )
. Ensuite, il met à l'échelle la valeur pour coordonner le système(0.0, 1.0)
.* ( res_max - res_min )
cette valeur d'échelle pour coordonner le système commençant à zéro avec la longueur du système de coordination des résultats(0.0, dst_max - dst_min)
+ res_min
traduit la valeur en système de coordonnées résultant(dst_min, dst_max)
la source
L'équation de base pour la tranformation de coordonnées 2D (en algèbre, sans rotation impliquée) est:
étant donné deux points dans TargetCoordinate (T1, T2) qui correspond à deux points dans SourceCoordinate (S1, S2),
TranslateFactor
etScalingFactor
est donné en résolvant:ce qui résulte:
Dans votre cas, pour la coordonnée x
Et ainsi,
les coordonnées y suivent la même procédure
la source
Faire quelques hypothèses:
Ensuite, la question migre vers: Quelle est la matrice de transformation homogène pour mon changement de base?
Pour y répondre, nous avons d'abord besoin des réponses à trois questions subsidiaires:
Définissez les réponses à ces trois questions comme suit:
Alors la matrice de transformation homogène est:
Ma convention ici est que les points sont représentés par des vecteurs de ligne, qui est la convention normale de l'infographie; les mathématiciens et les physiciens utilisent souvent l'oppsoite.
la source