I have missile and target data in.txt format and f-16.mat and missile.mat models for 3d animating missile and target . According to my data set missile path is in trajectory.
조회 수: 6 (최근 30일)
이전 댓글 표시
But when I want to 3d models for animating they are not animating only plotting is animating .I don't what's the issue . Can you correct the code if it's possible
Here is my .mat files data """>> load('enemy.mat');
whos
Name Size Bytes Class Attributes
data_aam 1559x6 76947 table
data_enemy 2129x6 104305 table
end_idx 1x1 8 double
n_rows_aam 1x1 8 double
n_rows_enemy 1x1 8 double
n_steps 1x1 8 double
pAlpha 1x1 8 double
pEdge 1x3 24 double
pFace 1x3 24 double
pMatrix 1559x6 74832 double
pModel 1x8 16 char
pPath 1x2 4 char
pPathColor 1x3 24 double
pPathWidth 1x1 8 double
pScale 1x1 8 double
start_idx 1x1 8 double
trajectory_aam 1559x6 74832 double
trajectory_enemy 1559x6 74832 double
>> load('aam.mat');
whos
Name Size Bytes Class Attributes
data_aam 1559x6 76947 table
data_enemy 2129x6 104305 table
end_idx 1x1 8 double
n_rows_aam 1x1 8 double
n_rows_enemy 1x1 8 double
n_steps 1x1 8 double
pAlpha 1x1 8 double
pEdge 1x3 24 double
pFace 1x3 24 double
pMatrix 1559x6 74832 double
pModel 1x11 22 char
pPath 1x2 4 char
pPathColor 1x3 24 double
pPathWidth 1x1 8 double
pScale 1x1 8 double
start_idx 1x1 8 double
trajectory_aam 1559x6 74832 double
trajectory_enemy 1559x6 74832 double
>> % Check the contents of f-16.mat
matFileF16 = load('f-16.mat');
disp(matFileF16);
% Check the contents of missile.mat
matFileMissile = load('missile.mat');
disp(matFileMissile);
V: [2537×3 double]
F: [4428×3 double]
C: [2537×1 double]
V: [3902×3 double]
F: [7426×3 double]
C: [3902×1 double]"""
*
# * bold*% Load and process the .txt files
data_enemy = readtable('target_2.txt', 'VariableNamingRule', 'preserve'); % Target data
data_aam = readtable('missile_2.txt', 'VariableNamingRule', 'preserve'); % Missile data
% Extract relevant columns: position (x, y, z) and angular data (phi, theta, psi)
trajectory_enemy = [data_enemy.tgtpos_x, data_enemy.tgt_pos_y, data_enemy.tgt_pos_z, ...
data_enemy.tgt_phi, data_enemy.tgt_theta, data_enemy.tgt_psi];
% Time vector for the enemy (target) data
time_enemy = 1:size(trajectory_enemy, 1);
% Time vector for the missile data
time_aam = linspace(1, size(trajectory_enemy, 1), size(data_aam, 1));
% Interpolate missile data to match the target data size
trajectory_aam_interp = interp1(time_aam, [data_aam.Msl_pos_x, data_aam.Msl_pos_y, data_aam.Msl_pos_z, ...
data_aam.Msl_phi, data_aam.Msl_theta, data_aam.Msl_psi], ...
time_enemy);
% Verify data array sizes
disp('Size of target trajectory:');
disp(size(trajectory_enemy));
disp('Size of interpolated missile trajectory:');
disp(size(trajectory_aam_interp));
% Save interpolated data to .mat files for use in flypath
save('enemy_trajectory.mat', 'trajectory_enemy');
save('aam_trajectory.mat', 'trajectory_aam_interp');
% Create 3D models with appropriate scaling
new_object('enemy.mat', trajectory_enemy, ...
'model', 'f-16.mat', 'edge', [.4 .4 .4], 'face', [.6 .6 .6], ...
'path', 'on', 'pathcolor', [.3 .3 .3], 'pathwidth', 1, 'scale', 0.0005);
new_object('aam.mat', trajectory_aam_interp, ...
'model', 'missile.mat', 'edge', [.2 .2 .2], 'face', [.3 .3 .3], ...
'path', 'on', 'pathcolor', [.89 .47 .0], 'pathwidth', 1, 'scale', 0.0005);
disp('Checking dimensions of loaded matrices...');
load('enemy.mat');
disp(size(trajectory_enemy));
load('aam.mat');
disp(size(trajectory_aam_interp));
flypath('enemy.mat', 'aam.mat', ...
'animate', 'on', 'step', 10, ...
'font', 'Arial', 'fontsize', 12, ...
'view', [45, 30], 'window', [800, 600], ...
'output', 'trajectory_animation.mp4', ...
'xlim', [-10000, 10000], ...
'ylim', [-10000, 15000], ...
'zlim', [-1500, 2000]);
Here is flypath function code *****%
% FLYPATH (flypath.m)
%
% Displays static and animated trajectories of missiles and air targets
%
% SYNTAX:
%
% flypath(object_1,object_2,...,object_n,varargin)
%
% PARAMETERS:
%
% object_x : object data set produced by 'new_object' function,
% use command 'help new_object' to get more information
%
% OPTIONAL ARGUMENTS:
%
% 'animate' : animation on/off ('on','off' - default 'off')
% 'axis' : axes visibility ('on','off' - default 'on')
% 'axiscolor' : axes and axes font color ([R G B] - default [0 0 0])
% 'color' : display area color ([R G B] - default [1 1 1])
% 'dpi' : dpi value (75,150,300,600 - default 150)
% 'font' : font name (string - default 'Times New Roman')
% 'fontsize' : font size (default 12)
% 'output' : output file name (string - default 'none')
% 'step' : model repetition density (default 10)
% 'view' : camera view angles ([azimuth elevation] - default [15 30])
% 'window' : display area size ([width height] - default [800 600])
% 'xlim' : x axes limits ([min max] or 'off' - default 'off')
% 'ylim' : y axes limits ([min max] or 'off' - default 'off')
% 'zlim' : x axes limits ([min max] or 'off' - default 'off')
%
% EXAMPLES OF USE:
%
% trajectory = load('trajectory_tbm.mat');
% new_object('ballistic_missile.mat',trajectory,...
% 'model','scud.mat','scale',5,...
% 'path','on','pathcolor',[.89 .0 .27]);
% flypath('ballistic_missile.mat',...
% 'animate','off','step',30,...
% 'axis','on','axiscolor',[0 0 0],'color',[1 1 1],...
% 'font','Georgia','fontsize',6,...
% 'view',[0 0],'window',[1800 600],...
% 'xlim',[-2e4 16e4],'ylim',[-10 10],'zlim',[0 4e4],...
% 'output','tbm_example.png','dpi',600);
%
function flypath(varargin)
objCount = 0;
% --- check input parameters ---
if nargin < 1
error('Not enough input parameters!');
end;
% --- default input parameters ---
pAnimate = 'off'; % animation: 'on','off'
pAxis = 'on'; % axes visibility: 'on','off'
pAxisColor = [ 0 0 0 ]; % axes and axes font color: [ R G B ]
pColor = [ 1 1 1 ]; % display area color: [ R G B ]
pDpi = 150; % dpi value: 75, 150, 300, 600
pFont = 'Times New Roman'; % font name
pFontSize = 12; % font size
pOutput = 'none'; % output filename or 'none'
pStep = 10; % model repetition density
pView = [ 15 30 ]; % camera view angles: [ azimuth elevation ]
pWindow = [ 800 600 ]; % display area size (in pixels)
pXLim = 'off'; % x axes limits ([min max] or 'off' - default 'off')
pYLim = 'off'; % y axes limits ([min max] or 'off' - default 'off')
pZLim = 'off'; % z axes limits ([min max] or 'off' - default 'off')
% --- read input parameters ---
i = 1;
while i <= length(varargin)
switch lower(varargin{i})
case 'animate'
pAnimate = varargin{i+1};
i = i + 2;
case 'axis'
pAxis = varargin{i+1};
i = i + 2;
case 'axiscolor'
pAxisColor = varargin{i+1};
i = i + 2;
case 'color'
pColor = varargin{i+1};
i = i + 2;
case 'dpi'
pDpi = varargin{i+1};
i = i + 2;
case 'font'
pFont = varargin{i+1};
i = i + 2;
case 'fontsize'
pFontSize = varargin{i+1};
i = i + 2;
case 'output'
pOutput = varargin{i+1};
i = i + 2;
case 'step'
pStep = varargin{i+1};
i = i + 2;
case 'view'
pView = varargin{i+1};
i = i + 2;
case 'window'
pWindow = varargin{i+1};
i = i + 2;
case 'xlim'
pXLim = varargin{i+1};
i = i + 2;
case 'ylim'
pYLim = varargin{i+1};
i = i + 2;
case 'zlim'
pZLim = varargin{i+1};
i = i + 2;
otherwise
if exist(varargin{i},'file') == 2
objCount = objCount + 1;
else
error('file %s does not exist!',varargin{i});
end
i = i + 1;
end
end;
% --- object loader ---
i = 1;
while i <= objCount
% --- load data to tmp variable ---
tmp = load(varargin{i});
% --- add data to obj structure ---
if size(tmp.pMatrix,1) < size(tmp.pMatrix,2)
obj(i).matrix = tmp.pMatrix';
else
obj(i).matrix = tmp.pMatrix;
end;
obj(i).face = tmp.pFace;
obj(i).edge = tmp.pEdge;
obj(i).alpha = tmp.pAlpha;
obj(i).path = tmp.pPath;
obj(i).pathcolor = tmp.pPathColor;
obj(i).pathwidth = tmp.pPathWidth;
obj(i).scale = tmp.pScale;
% --- add 3d model to the structure ---
tmp = load(tmp.pModel);
obj(i).v(:,1) = -1 * obj(i).scale * tmp.V(:,1);
obj(i).v(:,2) = 1 * obj(i).scale * tmp.V(:,2);
obj(i).v(:,3) = 1 * obj(i).scale * tmp.V(:,3);
obj(i).f = tmp.F;
% --- increment counter ---
i = i + 1;
end;
% --- check matrix sizes ---
sizeCounter = 0;
maxLength = size(obj(1).matrix,1);
if objCount > 1
i = 2;
while i <= objCount
if size(obj(i).matrix,1) ~= maxLength
sizeCounter = sizeCounter + 1;
end;
i = i + 1;
end;
if sizeCounter > 0
warning('data array sizes are different!');
warning('data cutted to the smallest matrix dimension');
i = 1;
maxLength = 9e100;
while i <= objCount
if size(obj(i).matrix,1) < maxLength
maxLength = size(obj(i).matrix,1);
end
i = i + 1;
end;
end;
end
% --- check step size ---
if pStep >= maxLength
warning('step size is equal or greather than max length of data array!');
warning('default step value used');
pStep = 10;
end;
% --- prepare display area ---
fig = figure(1);
set(fig,...
'Name','flypath3d',...
'NumberTitle','off',...
'MenuBar','none',...
'ToolBar','figure',...
'Pointer','crosshair',...
'Position',[50 50 pWindow(1) pWindow(2)],...
'Color',pColor);
set(gca,...
'FontName',pFont,...
'Color',pColor,...
'XColor',pAxisColor,...
'YColor',pAxisColor,...
'ZColor',pAxisColor,...
'FontSize',pFontSize);
clf(fig);
hold on;
% --- animate ---
for i = 1:pStep:maxLength
% --- prepare new frame for animation ---
if strcmp(pAnimate,'on') == 1
clf(fig);
hold on;
end;
set(gca,...
'FontName',pFont,...
'Color',pColor,...
'XColor',pAxisColor,...
'YColor',pAxisColor,...
'ZColor',pAxisColor,...
'FontSize',pFontSize);
% --- draw scene ---
for j = 1:1:objCount
theta = obj(j).matrix(i,4);
psi = obj(j).matrix(i,5) - pi/2;
phi = -1 * obj(j).matrix(i,6);
% --- transformation matrix ---
sinTheta = sin(theta);
cosTheta = cos(theta);
sinPsi = sin(psi);
cosPsi = cos(psi);
sinPhi = sin(phi);
cosPhi = cos(phi);
transformMatrix = [ ...
cosPsi * cosTheta ...
-sinPsi * cosTheta ...
sinTheta; ...
cosPsi * sinTheta * sinPhi + sinPsi * cosPhi ...
-sinPsi * sinTheta * sinPhi + cosPsi * cosPhi ...
-cosTheta * sinPhi; ...
-cosPsi * sinTheta * cosPhi + sinPsi * sinPhi ...
sinPsi * sinTheta * cosPhi + cosPsi * sinPhi ...
cosTheta * cosPhi ];
vertices = obj(j).v * transformMatrix;
objectSet = [ obj(j).matrix(i,1) obj(j).matrix(i,2) obj(j).matrix(i,3) ];
delta = repmat( objectSet, size( vertices, 1 ), 1 );
vertices = vertices + delta;
objPath = patch( 'faces', obj(j).f, 'vertices', vertices );
set(objPath, ...
'FaceColor',obj(j).face,...
'FaceAlpha',obj(j).alpha,...
'EdgeColor',obj(j).edge );
if strcmp(obj(j).path,'on') == 1
plot3(obj(j).matrix(1:i,1),...
obj(j).matrix(1:i,2),...
obj(j).matrix(1:i,3),...
'Color', obj(j).pathcolor, ...
'LineWidth', obj(j).pathwidth, ...
'LineStyle', '-');
end;
end;
% --- display parameters ---
if strcmp(pXLim,'off') ~= 1
xlim( pXLim );
end
if strcmp(pYLim,'off') ~= 1
ylim( pYLim );
end
if strcmp(pZLim,'off') ~= 1
zlim( pZLim );
end
xlabel('x [m]');
ylabel('y [m]');
zlabel('z [m]');
if strcmp(pAxis,'on') == 1
axis on;
axis square;
grid on;
else
axis off;
axis square;
grid off;
end;
lighting phong;
daspect([1 1 1]);
view( pView );
if strcmp(pAnimate,'on') == 1
drawnow;
end;
% --- save the results to the gif file ---
if strcmp(pAnimate,'on') == 1
if strcmp(pOutput,'none') ~= 1
frame = getframe(1);
im = frame2im(frame);
[A,map] = rgb2ind(im,256);
if i == 1;
imwrite(A,map,pOutput,'gif','LoopCount',Inf,'DelayTime',.04);
else
imwrite(A,map,pOutput,'gif','WriteMode','append','DelayTime',.04);
end;
end;
end;
end;
if strcmp(pAnimate,'off') == 1
if strcmp(pOutput,'none') ~= 1
switch(pDpi)
case 75
eval(sprintf('print -dpng -r75 %s;', pOutput));
case 150
eval(sprintf('print -dpng -r150 %s;', pOutput));
case 300
eval(sprintf('print -dpng -r300 %s;', pOutput));
case 600
eval(sprintf('print -dpng -r600 %s;', pOutput));
otherwise
eval(sprintf('print -dpng -r600 %s;', pOutput));
end;
end;
end;
end**** Where I'm getting wrong please suggest me and I have given all .matfiles data . Where I'm getting issue I want 3d models animation
댓글 수: 0
답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Animation에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!