يكشنبه, ۳ آذر ۱۳۹۸، ۱۱:۴۳ ب.ظ
شبیهسازی تایر خودرو در متلب
تو شبیهسازی شبکههای بیسیم ساخت اشیای سه بعدی و توزیع سه بعدی اهمیت زیادی داره، در فضای سه بعدی امکان شبیهسازی عملی و واقعیتر سیگنال و افت مسیر و چند مسیری و... فراهم میشه، در زیر کد ایجاد یک تایر به شکل سه بعدی در متلب آورده شده ، با کپی و پیست این کد در داخل یک اسکریپت متلب میتوانید خروجی زیر را مشادهده کنید...
%% clear commands
function xx
delete(allchild(0));close all;
clear;
clc;
%% path commands
file=matlab.desktop.editor.getActive;
try
fileDetail=dir(file.Filename);
folderName=fileDetail.folder;
catch
index=strfind( file.Filename,'\');
folderName=file.Filename(1:index(end)-1);
end
paths=genpath(folderName);
addpath(paths);
cd(folderName);
side=10;
t=linspace(0,2*pi ,side+1);
t(6)=NaN;
side1=50;
t1=linspace(0, 2*pi ,side1+1);
% ph=0;
% x=r' *cos(t+ph);
% z=(0:side)' * ones(1,side+1);
% y=r' *sin(t+ph) ;
ph=0;
x= cos(t+ph) /5 ;
y= 0*(0:side)';
z= sin(t+ph) /5 ;
% plot3(x,y,z);hold on
% path=(t1+ph).^2;path=path/max(path)
path.x=[0,1,1,1,2,2,2,1,1,0];
path.y=0:length(path.x)-1;
path.x= cos (t1+ph)*5 ;
path.y= sin(t1+ph) *5 ;
[path.x,path.y]=divider(path.x,path.y,2);
[t1,t1]=divider(t1,t1,2);
% plot(path.x ,path.y , 'r');hold on
% xlabel( 'X'); ylabel( 'Y'); zlabel( 'Z')
matrixObj.x= cos(t ) ;
matrixObj.y= 0*(0:side)';
matrixObj.z= sin(t ) ;
for in=1:length(path.x)-1
[ x, y, z]=rotateParameter(matrixObj,[0,0,1],rad2deg(t1(in)));
% path.x= cos (t + ph(in)) ;
% path.y=sin (t+ ph(in) ) ;
%
% plot3(x+path.x(in),y+path.y(in),z,'b-');hold on
surf([x+path.x(in);x+path.x(in+1) ],[y+path.y(in);y+path.y(in+1) ],[z;z],'facecolor','k');hold on; alpha(0.2)
% plot3(x ,y ,z,'b');hold on
axis('equal')
end
end
function [ newx, newy, newz]=rotateParameter(matrixObj,azel,alpha)
u = azel(:)/norm(azel);
alph = alpha*pi/180;
cosa = cos(alph);
sina = sin(alph);
vera = 1 - cosa;
x = u(1);
y = u(2);
z = u(3);
rot = [cosa+x^2*vera x*y*vera-z*sina x*z*vera+y*sina; ...
x*y*vera+z*sina cosa+y^2*vera y*z*vera-x*sina; ...
x*z*vera-y*sina y*z*vera+x*sina cosa+z^2*vera]';
x = matrixObj.x;
y = matrixObj.y;
z = matrixObj.z;
[m,n] = size(z);
if numel(x) < m*n
[x,y] = meshgrid(x,y);
end
[m,n] = size(x);
newxyz = [x(:) , y(:) , z(:) ];
newxyz = newxyz*rot;
newx = reshape(newxyz(:,1),m,n);
newy = reshape(newxyz(:,2),m,n);
newz = reshape(newxyz(:,3),m,n);
end

۹۸/۰۹/۰۳