Моделирование движения рук как трехмерной кривой в Matlab / Java - PullRequest
7 голосов
/ 04 января 2012

Мне просто нужно несколько указаний относительно моей проблемы, где искать и т. Д. Я использую перчатку для отслеживания движения для одного из моих проектов, который возвращает значения X, Y и Z для каждого пальца и для ладони .

То, что я хотел бы сделать, - это сначала создать представление каждого движения пальца на основе этих координат, а затем прикрепить каждое из них к движению ладони, чтобы получить представление руки. Этот второй шаг будет легким, как только я справлюсь с первым, но ... я не справлюсь.

Я пытаюсь реализовать его в Java (улучшенные возможности анализа), но мне удается создать трехмерный график только со ВСЕМИ точками одновременно. И их около 45 000 на каждой кривой, так что ... Не могли бы вы представить, как сделать ее более похожей на анимацию, например, при отображении точки с координатами XYZ в данный момент времени t?

Другой вопрос: действительно ли matlab - лучший вариант для этого? Я вижу, как заставить эту анимацию работать в Java, но я никогда не использовал Java для управления данными, и я сомневаюсь, что она действительно хороша в этом. Есть ли другое программное обеспечение / язык, который был бы хорош для управления данными и их анимации? Или мне просто использовать Java для анимации и Matlab для анализа?

Спасибо!

1 Ответ

2 голосов
/ 05 января 2012

Вы можете сделать следующее. Пусть pos - матрица Nx3, которая содержит x, y, z данные точки для N временных случаев. Вы пишете основной скрипт, который устанавливает переменные и т. Д., И создаете таймер цикла t1, который вызывает функцию построения графика "doPlot". Основной скрипт:

clear all
clc

pos=rand(100,3)*10;  %position matrix of random x,y,z coordinates. 100 time instances here

ax=axes;
set(ax,'NextPlot','replacechildren');
axis([0 10 0 10 0 10]); %set axis limits- fit to your needs

Dt=0.1; %sampling period in secs

k=1;
hp=plot3(pos(k,1),pos(k,2),pos(k,3),'o'); %get handle to dot object

t1=timer('TimerFcn','k=doPlot(hp,pos,t1,k)','Period', Dt,'ExecutionMode','fixedRate');
start(t1);

Далее вы создаете функцию построения графика doPlot,

function k=doPlot(hp,pos,t1,k)

k=k+1;
if k<length(pos)
   set(hp,'XData',pos(k,1),'YData',pos(k,2),'ZData',pos(k,3));
   axis([0 10 0 10 0 10]);
else
    stop(t1)
end

Вы увидите точку (круг) в 3D, случайно перемещающуюся в пространстве. Период анимации составляет Dt секунд (в данном случае 0,1 секунды). Вы должны соответствовать его вашим потребностям. Это базовая анимация в Matlab. Вы могли бы сделать гораздо больше. Это зависит от ваших потребностей.

...