#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). Это может быть либо плоская проекция, либо перспективная проекция.
Как только у вас будет проекция, вы можете сделать что-то вроде следующего:
- Найдите точку, которая находится дальше всего от вас.
- Выполните приведенные ниже последовательности для левой и правой ветвей от самой дальней точки.
-
Для каждой ветви создайте многоугольник из каждой из четырех точек:
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])
-
Раскрасьте полигоны градиентом, изменяющимся на z, чтобы получить описанный выше эффект.
- Добавьте синюю линию из T(x [n], y [n], z [n]), T(x [n 1],y [n 1],z [n 1])
- Повторяйте для увеличения n, пока не достигнете точки, «ближайшей» к вам.
Надеюсь, это поможет вам начать.
Комментарии:
1. У меня нет предшествующего навыка работы с matlab. Можете ли вы предложить название функции, которую я должен использовать?