Des relations linéaires pour deux graphiques (x, y)
-
19-09-2019 - |
Question
J'ai données x,y
reveniez d'une base de données de [coordinates1]
(SIG - mais cela pourrait être une base de données). Je ma demande avec son propre système de coordonnées, faisant référence à la même carte.
Je l'ai établi qu'une relation linéaire existe entre coordinates1 (x, y) et coordinates2(x,y)
comme je l'ai soustraites deux différents coordinates1 et coordinates2
(division x1
avec x2
et y1
avec y2
) et dans tous les cas j'obtenir les deux montrant 0,724 ou 0,141 ou 0,825, respectivement, à savoir coordinates1 + coordinates2.
Ce que je dois maintenant comprendre - ou vous aider - est que si coordinates1(100000,200000)
et coordinates2(0.125,0.255)
Comment calculer coordinates2(x,y)
à partir des données dans coordinates1(x,y)
La solution
Par souci de clarté, je vais appeler les coordonnées dans votre base ( x n , y n ), et des coordonnées dans la cible ( U n , v n ).
Maintenant, si nous supposons:
- Les origines des deux systèmes de coordonnées sont les mêmes.
- L'orientation des deux systèmes de coordonnées sont les mêmes (à savoir une ne tourne pas par rapport à l'autre).
Dans ce cas, vous ne avez besoin d'un ensemble de points {( x 1 , y 1 ), ( U 1 , v 1 )} pour déterminer l'emplacement du ( u n , v n ):
- U n = u 1 / x 1 * x n
- v n = v 1 / y 1 * y n
Note: nous devons avoir x 1 ≠ 0, y 1 ≠ 0
D'autre part, si les deux systèmes de coordonnées ont des origines différentes (mais ils ne sont toujours pas mis en rotation par rapport à l'autre), nous aurons besoin de deux ensembles de points {( x 1 , y 1 ), ( U 1 , v 1 )} et {( x 2 , y 2 ), (< i> u 2 , v 2 )}:
- u n = ( u 2 - U 1 ) / ( x 2 - x 1 ) * ( x n - x 1 ) + U 1
- v n = ( v 2 - v 1 ) / ( y 2 - y 1 ) * ( y n - y 1 ) + v 1
Note: nous devons avoir x 1 ≠ x 2 , y 1 ≠ y 2
Maintenant, si l'on fait tourner deux systèmes de coordonnées par rapport à l'autre, vous avez besoin (je crois) un ensemble plus de coordonnées correspondant. Mais il ne semble pas que vous avez besoin (à moins que l'une de vos cartes a pointe vers le nord dans une direction autre que vers le haut), donc je ne vais pas travailler les maths maintenant. :)
Autres conseils
Pour la conversion, vous devez connaître les coordonnées d'un point O
dans vos systèmes deux coordonnées.
Supposons que O
a des coordonnées x1O,y1O
dans le système de coordonnées 1 et x2O,y2O
dans le système de coordonnées 2.
Ensuite, un point de coordonnées x1,y1
dans le système 1 et x2,y2
dans le système 2 satisfera:
(x1O - x1) = Kx * (x2O - x2)
(y1O - y1) = Ky * (y2O - y2)
où Kx
et Ky
sont le facteur d'échelle. Si vous connaissez les coordonnées d'un autre point M dans les deux systèmes, que vous aurez Kx
et Ky
avec
Kx = (x1O - x1M) / (x2O - x2M)
Ky = (y1O - y1M) / (y2O - y2M)
, il vous suffit ensuite d'appliquer la première relation à passer d'un système à un autre, avec
x1 = x1O - Kx * (x2O - x2)
y1 = y10 - Ky * (y2O - y2)
ou
x2 = x2O - (x1O - x1) / Kx
y2 = y2O - (y1O - y1) / Ky
Avez-vous aussi besoin du code?