Как построить 3D-представление GPS-трека

#matlab #gps

#matlab #gps

Вопрос:

У меня есть 3 вектора, x , y z . Элементы трех разных векторов представляют положение точки в пространстве (например, x(1) , y(1) , z(1) содержит информацию о положении первой точки).

Теперь мне нужно реализовать 3D-представление всего набора точек, и оно должно выглядеть следующим образом:

введите описание изображения здесь

Кто-нибудь может мне помочь? Какая функция будет полезна?

Комментарии:

1. Попробуйте принять ответ, нажав на знак вопроса. Это считается хорошим стилем.

Ответ №1:

Вы можете использовать следующие функции:

  • PLOT3 — для рисования 3D-линии.
  • STEM3 — для рисования линий в проекции XY. Я бы, вероятно, использовал не все точки данных, а каждую вторую 5-ю, 10-ю и т.д., В зависимости от плотности точек.
  • При желании вы можете использовать CLINE из FileExchange (this или this) вместо PLOT3, чтобы раскрасить линию по ее высоте.

Не забудьте установить hold on и hold off .

Вот пример:

 %# Generate random data
x = sin(0:0.01:2*pi);
y = cos(0:0.01:2*pi);
n = numel(x);
z = x   rand(1,n)*0.05   1;
%# Plot track line
plot3(x,y,z,'LineWidth',2)
%# Plot lines to XY projection for every 5th point
hold on
stem3(x(1:5:end),y(1:5:end),z(1:5:end),'Marker','none','color','c')
hold off
%# Set axes invisible
set(gca,'Visible','off')
  

пример построения трека

Ответ №2:

Вам нужно создать проекционное преобразование из вашего 3D-мира (x, y, z) в ваше изображение (X, Y). Это может быть либо плоская проекция, либо перспективная проекция.

Как только у вас будет проекция, вы можете сделать что-то вроде следующего:

  1. Найдите точку, которая находится дальше всего от вас.
  2. Выполните приведенные ниже последовательности для левой и правой ветвей от самой дальней точки.
  3. Для каждой ветви создайте многоугольник из каждой из четырех точек:

    T(x [n],y[n], z [n])

    T(x[n],y[n],0)

    T(x[n 1],y[n 1],0)

    T(x [n 1],y[n 1], z[n 1])

  4. Раскрасьте полигоны градиентом, изменяющимся на z, чтобы получить описанный выше эффект.

  5. Добавьте синюю линию из T(x [n], y [n], z [n]), T(x [n 1],y [n 1],z [n 1])
  6. Повторяйте для увеличения n, пока не достигнете точки, «ближайшей» к вам.

Надеюсь, это поможет вам начать.

Комментарии:

1. У меня нет предшествующего навыка работы с matlab. Можете ли вы предложить название функции, которую я должен использовать?