Попытка повернуть точки по длине широты, но добиться вращения только вокруг оси Z - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть некоторые точки в координатной системе координат ECEF , и я хотел бы повернуть их на заданную широту и долготу.Основная идея того, что я пытаюсь сделать, это

rotated_vector = Rz(longitude_in_radians) * Rx(latitude_in_radians) * vector

, где vector - это позиция 3x1 ECEF, а Rz и Rx - это матрицы 3x3, определенные здесь .

Основная проблема, которую я получаю, заключается в том, что вращение вокруг оси Z соответствует ожидаемому, но вектор, кажется, не вращается вокруг оси X.

Я пытался сделать это как в Python, так и в Matlab, и я получаю одинаковый результат в обоих случаях.

Мой код Matlab выглядит следующим образом, так как он немного короче, чем мой код Python

close; clc; clear; 

R     = 6378; %earth radius
r     = 500; 
alt   = 200; %altitude of point
d     = R + alt; %offset of small sphere along x axis
alpha = 1/(2*d)*sqrt(4*d^2*R^2-(d^2-r^2+R^2)^2); %radius of circle intersection of two spheres

%% plotting spheres
[x,y,z] = sphere; %data for sphere of radius 1 at 0,0,0
figure
surf(R*x,R*y,R*z) %plot earth
hold on

%% plot the circle of intersection

theta = 0 : 0.01 : 2*pi;
yc    = alpha*cos(theta);
zc    = alpha*sin(theta);
xc    = theta*0 + sqrt(R^2 - alpha^2);

plot3(xc,yc,zc,'r', 'LineWidth',6)
axis equal

%% carry out the rotation
theta_z = 90 * pi/180;
theta_x = 45 * pi/180; % no matter what I enter here, the vector never leaves the x-y plane
theta_y = theta_x;

Rx = [1,            0,            0  ;
      0, cos(theta_x), -sin(theta_x) ;
      0, sin(theta_x),  cos(theta_x)];

Ry = [cos(theta_y), 0, sin(theta_y);
      0           , 1,          0  ;
      -sin(theta_y), 0, cos(theta_y)];

Rz = [cos(theta_z), -sin(theta_z), 0;
      sin(theta_z),  cos(theta_z), 0;
      0           ,             0, 1];

rotated = Rz * Rx * [xc; yc; zc];
plot3(rotated(1,:), rotated(2,:), rotated(3,:), 'r', 'LineWidth',6)



...