2009-04-02 15 views
4

J'ai un point sur la surface de la terre que je convertis en un vecteur du centre de la Terre.Calculer un vecteur 3D perpendiculaire au plan décrit par un point et une direction nord vrai

J'ai un vrai nord en degrés décrivant le chemin que le point parcourra à la surface de la terre.

J'ai besoin de calculer un vecteur qui est perpendiculaire au plan créé par le chemin de ce point le long de la surface terrestre.

J'ai essayé le calcul d'un point arbitraire le long du chemin en utilisant la méthode décrite here puis prendre le produit croisé des deux vecteurs mais il ne semble pas être assez précis et semble être plus frais généraux que nécessaire.

Ceci est en lien avec mon autre article ray-polygon-intersection-point-on-the-surface-of-a-sphere.

+0

Pouvez-vous clearifier votre entrée? "Le chemin des points sur la surface" implique plusieurs points, n'est-ce pas? Et comment est spécifié le cap nord? Un angle, un vecteur pointant du point au pôle nord, ou quelque chose de différent? –

+0

Si le cap vrai nord est spécifié comme vecteur et que vous avez votre point sur la surface, vous avez fixé un plan. Mais un vecteur perpendiculaire à ce plan est colinéaire avec le cap nord vrai. Je ne suis pas sûr de ce que vous voulez calculer. –

+0

J'ai un point à Lat, Lon que je convertis en un vecteur du Centre de la Terre. J'ai un angle en degrés nord vrai qui décrit le chemin, sur la surface de la terre, que ce point va voyager. Je dois essentiellement être en mesure de convertir Degrees North en un vecteur 3D et je peux faire le reste. – user66332

Répondre

4

Je suppose que vous essayez de calculer un vecteur situé dans le plan du chemin, pas perpendiculaire à celui-ci (puisque vous en avez déjà un - à savoir le vecteur de l'origine à votre point).

Vous devez d'abord calculer les vecteurs se trouvant dans ce plan qui pointent vers le nord et vers l'est. Pour ce faire, appelons P votre point, O l'origine, et N = (0, 0, R) est le point au sommet de votre sphère. Puis

e = cross(N - P, P - O) 

est un vecteur qui pointe est due, et est tangente à la sphère parce qu'elle est perpendiculaire à P - O, un rayon de la sphère.

Pour des raisons similaires

n = cross(e, P - O) 

sera point situé au nord, et sera tangente à la sphère.

Maintenant normalisent n et e, et vous avez une base orthonormé pour l'espace tangent à votre point. Pour trouver un vecteur dans une direction theta (par exemple, dans le sens antihoraire de l'axe de l'est positif, pour simplifier le calcul), il suffit de prendre un peu de e et un peu de n:

v = cos(theta) * e + sin(theta) * n 
+0

+1 belle explication :-) –

+0

J'ai finalement eu la même conclusion et ne pouvait pas avoir mieux expliqué. +1 –

0

Voilà ma compréhension de votre problème:

  • Vous avez un point sur la surface, spécifiée comme latitude/longitude de la Terre coordonnées que
  • la direction « nord vrai » est la direction qu'une personne à ce moment voyagerait pour atteindre le (géographique) pôle Nord par la route la plus directe possible. C'est-à-dire que le «vrai vecteur du nord» est tangent à la surface de la Terre au point choisi et pointe directement vers le nord, parallèlement à une ligne de longitude.
  • La direction du mouvement du point sera (initialement) tangente à la surface de la Terre au point choisi.
  • Vous avez un angle en degrés du nord vrai qui spécifie le cap vers lequel ce point va se déplacer.
  • Cet angle est l'angle entre le "vecteur nord vrai" et la direction du mouvement du point.
  • Vous voulez calculer un vecteur tangent à la surface de la Terre à ce point mais perpendiculaire à la direction du mouvement du point.

Si je comprends tout cela correctement, vous pouvez le faire comme suit:

  1. Le "vrai vecteur nord" à la latitude lat, longitude lng est donnée par

    [-sin(lat) * cos(lng), -sin(lat) * sin(lng), cos(lat)]

  2. Un vecteur perpendiculaire au "vrai vecteur nord" qui pointe le long d'une ligne de latitude (vers l'est) est donné par

    [-sin(lng), cos(lng), 0]

  3. Puisque ces deux vecteurs identifient le plan tangent à la surface de la Terre et que le vecteur spécifiant la direction du mouvement de votre point est également dans ce plan, votre vecteur de mouvement est une combinaison linéaire des deux précédents: où th est votre angle de cap . Pour trouver un vecteur perpendiculaire à ce vecteur de mouvement, vous pouvez simplement prendre le produit croisé du vecteur de rayon (c'est-à-dire le vecteur pointant du centre de la Terre à votre point,

    [cos(lat) * cos(lng), cos(lat) * sin(lng), sin(lat)]
    avec le vecteur de mouvement. ce calcul serait désordre, préférable de laisser l'ordinateur gérer)

0

Vous avez déjà 2 vecteurs:.

N = (0,0,1) des points vers le haut de l'origine

P = (a, b, c) points de l'origi n à votre point.

Calculez le vecteur unité à votre point U = P/| P |

calculer un vecteur unitaire perpendiculaire à U et N E = UXN

calculer un vecteur unitaire perpendiculaire à U et E (ce sera tangent à la sphère) T = UXE T pourrait être dirigée soit Nord ou Sud, donc si Tz < 0, multipliez T par -1.

T pointe maintenant vers le nord, et est parallèle à la tangente plane à la sphère à P.

Vous avez maintenant suffisamment d'informations pour construire une matrice de rotation (R), de sorte que vous pouvez faire pivoter T autour de U. Vous peut trouver comment faire une matrice pour la rotation autour de n'importe quel axe sur wikipedia:

En utilisant R, vous pouvez calculer un vecteur pointant dans la direction de Voyage.

A = RT

A est la réponse que vous recherchez.

Questions connexes