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.
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 1559×6 76947 table
data_enemy 2129×6 104305 table
end_idx 1×1 8 double
n_rows_aam 1×1 8 double
n_rows_enemy 1×1 8 double
n_steps 1×1 8 double
pAlpha 1×1 8 double
pEdge 1×3 24 double
pFace 1×3 24 double
pMatrix 1559×6 74832 double
pModel 1×8 16 char
pPath 1×2 4 char
pPathColor 1×3 24 double
pPathWidth 1×1 8 double
pScale 1×1 8 double
start_idx 1×1 8 double
trajectory_aam 1559×6 74832 double
trajectory_enemy 1559×6 74832 double
>> load(‘aam.mat’);
whos
Name Size Bytes Class Attributes
data_aam 1559×6 76947 table
data_enemy 2129×6 104305 table
end_idx 1×1 8 double
n_rows_aam 1×1 8 double
n_rows_enemy 1×1 8 double
n_steps 1×1 8 double
pAlpha 1×1 8 double
pEdge 1×3 24 double
pFace 1×3 24 double
pMatrix 1559×6 74832 double
pModel 1×11 22 char
pPath 1×2 4 char
pPathColor 1×3 24 double
pPathWidth 1×1 8 double
pScale 1×1 8 double
start_idx 1×1 8 double
trajectory_aam 1559×6 74832 double
trajectory_enemy 1559×6 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 animationBut 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 1559×6 76947 table
data_enemy 2129×6 104305 table
end_idx 1×1 8 double
n_rows_aam 1×1 8 double
n_rows_enemy 1×1 8 double
n_steps 1×1 8 double
pAlpha 1×1 8 double
pEdge 1×3 24 double
pFace 1×3 24 double
pMatrix 1559×6 74832 double
pModel 1×8 16 char
pPath 1×2 4 char
pPathColor 1×3 24 double
pPathWidth 1×1 8 double
pScale 1×1 8 double
start_idx 1×1 8 double
trajectory_aam 1559×6 74832 double
trajectory_enemy 1559×6 74832 double
>> load(‘aam.mat’);
whos
Name Size Bytes Class Attributes
data_aam 1559×6 76947 table
data_enemy 2129×6 104305 table
end_idx 1×1 8 double
n_rows_aam 1×1 8 double
n_rows_enemy 1×1 8 double
n_steps 1×1 8 double
pAlpha 1×1 8 double
pEdge 1×3 24 double
pFace 1×3 24 double
pMatrix 1559×6 74832 double
pModel 1×11 22 char
pPath 1×2 4 char
pPathColor 1×3 24 double
pPathWidth 1×1 8 double
pScale 1×1 8 double
start_idx 1×1 8 double
trajectory_aam 1559×6 74832 double
trajectory_enemy 1559×6 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 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 1559×6 76947 table
data_enemy 2129×6 104305 table
end_idx 1×1 8 double
n_rows_aam 1×1 8 double
n_rows_enemy 1×1 8 double
n_steps 1×1 8 double
pAlpha 1×1 8 double
pEdge 1×3 24 double
pFace 1×3 24 double
pMatrix 1559×6 74832 double
pModel 1×8 16 char
pPath 1×2 4 char
pPathColor 1×3 24 double
pPathWidth 1×1 8 double
pScale 1×1 8 double
start_idx 1×1 8 double
trajectory_aam 1559×6 74832 double
trajectory_enemy 1559×6 74832 double
>> load(‘aam.mat’);
whos
Name Size Bytes Class Attributes
data_aam 1559×6 76947 table
data_enemy 2129×6 104305 table
end_idx 1×1 8 double
n_rows_aam 1×1 8 double
n_rows_enemy 1×1 8 double
n_steps 1×1 8 double
pAlpha 1×1 8 double
pEdge 1×3 24 double
pFace 1×3 24 double
pMatrix 1559×6 74832 double
pModel 1×11 22 char
pPath 1×2 4 char
pPathColor 1×3 24 double
pPathWidth 1×1 8 double
pScale 1×1 8 double
start_idx 1×1 8 double
trajectory_aam 1559×6 74832 double
trajectory_enemy 1559×6 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 @matlab MATLAB Answers — New Questions