Как построить трехмерное изображение трека GPS - PullRequest
2 голосов
/ 22 мая 2011

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

Теперь мне нужно реализовать трехмерное представлениевесь набор точек, и это должно выглядеть так:

enter image description here

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

Ответы [ 2 ]

4 голосов
/ 23 мая 2011

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

  • 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')

example track plot

1 голос
/ 22 мая 2011

Вам необходимо создать проекционное преобразование из вашего трехмерного мира (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, пока не достигнете точки, "ближайшей" к вам.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...