شبیه‌سازی شبکه‌های بی سیم و کامپیوتری
شبیه سازی تخصصی شبکه‌های بی سیم و کامپیوتری مقاطع کارشناسی تا دکترا
  • شبیه سازی تخصصی شبکه‌های بی سیم و کامپیوتری مقاطع کارشناسی تا دکترا

مشخصات بلاگ
شبیه‌سازی شبکه‌های بی سیم و کامپیوتری

امکان سفارش، شبیه سازی مقاله و پایان نامه وجود دارد،
مطالب، با ذکر منبع قابل انتشار در سایت ها و وبلاگ ها و.. می باشد.
جهت دریافت مشاوره رایگان تماس بگیرید:

شماره تماس: 09147082079-0098
آیدی تلگرامی:https://t.me/MuosSA_NbO
جی میل :mo30no@gmail.com

تمامی کدهای این وبلاگ در حال حاضر به زبان متلب می باشد

«آنچه می‌دانیم ناچیز و آنچه نمی‌دانیم عظیم و وسیع است»
$$پیر سیمون لاپلاس$$

در این پست نحوه ایجاد یک شلنگ سینوسی از طریق رشد دادن چند ضلعی، در راستای یک مسیر سینوسی روی صفحه xy آورده شده است، 

توضیح مختصر: به ازای زوایای مثبت، چرخش  در خلاف عقربه های ساعت و به ازای زوایای منفی، چرخش در جهت عقربه های ساعت صورت گرفته است. از دو تابع rotateParameter برای چرخش  و  angl= anglOnePolToTwoPol(angl,type) برای تغییر زوایای دوقطبی به تک قطبی استفاده شده، مثلا 270 را به -90 درجه تبدیل می کنه( در حالی که نوع 2 باشه) و در نوع 1( رادیان)، مثلا (pi/2) *3 را به -pi/2 تبدیل می کنه.

کد اجرایی:

%% 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=20;
t=linspace(0,2*pi ,side+1);
side1=50;
t1=linspace(0, 2*pi ,side1+1);
ph=0;

path.x=  t1 ;
path.y= sin(t1+ph) *5  ;

plot([t1;path.x ] ,[path.y*0 ;path.y] ,'r' );hold on
plot3([-7:7]',[-7:7]'*0,[-7:7]'*0);hold on
plot3([-7:7]'*0,[-7:7]' ,[-7:7]'*0 );hold on
plot3([-7:7]'*0,[-7:7]'*0,[-7:7]' );hold on
text(7,0,0,'x');hold on
text(0,7,0,'y');hold on
text(0,0,7,'z');hold on
% [path.x,path.y]=divider(path.x,path.y,2);
% [~,t1]=divider(t1,t1,2);


fig.x= cos(t )/2  ;
fig.y=  0*(0:side);
fig.z= sin(t  )/2   ;
fig1=fig;
% plot(t1,tan(t1))

for in=1:length(path.x)-1
    plot3(fig.x+path.x(in),fig.y+path.y(in) ,fig.z ,'b-');hold on


    if (anglOnePolToTwoPol(t1(in),1)>0)
        [ fig.x, fig.y, fig.z]=rotateParameter(fig1,[0,0,1],   -rad2deg(t1(in)) );
    elseif (anglOnePolToTwoPol(t1(in),1)<0)
        [ fig.x, fig.y, fig.z]=rotateParameter(fig1,[0,0,1],  rad2deg(t1(in)) );
    end



    surf([fig.x+path.x(in);fig.x+path.x(in+1) ],[fig.y+path.y(in);fig.y+path.y(in+1) ],[fig.z;fig.z],'facecolor','k');hold on; alpha(0.2)

    view(3);
    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



function angl= anglOnePolToTwoPol(angl,type)
if nargin==1
    type=1;
end
switch type
    case 1% radian type
        angl=mod(angl,2*pi);
        miInd=angl<0;
        angl(miInd)=(2*pi)+angl(miInd);

    case 2
        angl=mod(angl,360);
        miInd=angl<0;
        angl(miInd)=(360)+angl(miInd);
end
end

نمونه خروجی:

دانلود کد

۰ نظر موافقین ۰ مخالفین ۰ ۱۶ تیر ۰۱ ، ۱۳:۴۹
موسی حسن زاده
چهارشنبه, ۱۵ تیر ۱۴۰۱، ۰۶:۲۸ ب.ظ

رشد چند ضلعی حول محور z , y

 در این پست یک مقدمه ای برای رشد اشکال هندسی بسته و باز حول یک مسیر معین تشریح شده

شما می توانین متغیر side چند ضلعی رشد و مسیر را تعیین کنین و تغییرات را مشاهده کنین

رشد چند ضلعی حول محور y،

%% 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=100;
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.z= sin(t1+ph) *5  ;
plot3([path.x*0;path.x ] ,[path.z*0 ;path.z]*0 ,[path.z*0 ;path.z] ,'r' );hold on
 
    [path.x,path.z]=divider(path.x,path.z,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.z=  0*(0:side)';
    matrixObj.y= sin(t  )   ;
    
for in=1:length(path.x)-1
    
    
    
    [ x, y, z]=rotateParameter(matrixObj,[0,1,0],-rad2deg(t1(in)));
    
%      path.x=  cos (t + ph(in)) ;  
%      path.y=sin (t+ ph(in) )  ;
% 
     
       plot3(x+path.x(in),y,z+path.z(in),'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
xlabel('x');
ylabel('y');
zlabel('z');
      view(3);
   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




نمونه خروجی:

رشد چند ضلعی حول محور z:

%% 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=20;
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  ;
plot([path.x*0;path.x ] ,[path.y*0 ;path.y] ,'r' );hold on

 
    [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

    view(3);
   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




نمونه خروجی:

 

دانلود هر دو کد:

۰ نظر موافقین ۰ مخالفین ۰ ۱۵ تیر ۰۱ ، ۱۸:۲۸
موسی حسن زاده
چهارشنبه, ۱۵ تیر ۱۴۰۱، ۱۲:۵۲ ب.ظ

توزیع نودها در فضاهای باز سه بعدی

در این پست، روش توزیع نوده در درون یک فضای سه بعدی و باز هندسی را تشریح کردیم.

 

یادآوری می شود که شما می توانید فرمول چند جمله ای ها را تغییر بدید و نتایج را مشاهده کنید، کافی است فایل را دانلود و با متلب باز کنین و اجرا بگیرین.

 

 

clc;
clear;
close all;


[x,y]=meshgrid(-10:.5:10,-10:.5:10);

z=   (x.^4+y.^4);
r = nthroot(rand(size(x )),40);
r1 =  sqrt(rand(size(x )));
r2 =  sqrt(rand(size(x )));

 x1=x .*r ;
 y1=y .*r ;
 z1=z.*r ;
 
 plot3(x1 ,y1 ,z1   ,'-k' );hold on;% shell
 plot3(y1 ,x1 ,z1   ,'-k' );hold on;% shell


plot3(x1.*r1 ,y1.*r2 ,z1.*r  ,'*');hold on
 

نمونه خروجی:

 

 دانلود سورس کد

سوالی داشتین پیام بدین.



کپی به شرط ارجاع به منبع بلامانع است: (wcnet.blog.ir)

۰ نظر موافقین ۰ مخالفین ۰ ۱۵ تیر ۰۱ ، ۱۲:۵۲
موسی حسن زاده
سه شنبه, ۱۴ تیر ۱۴۰۱، ۰۸:۴۱ ب.ظ

توزیع نودها در فضاهای باز دو بعدی

در این پست، روش توزیع نوده در درون یک فضای باز هندسی را تشریح کردیم.

 

یک تابع تحت عنوان divider  فایل اجرایی قرار دارد که قبلا در پست قبلی شرح داده شده است، کافی است فایل را دانلود و با متلی باز کنین و اجرا بگیرین.

 

pow=2;% chang this parameter

t1=-2*pi:.2:2*pi;
x1= (t1);
y1= (t1).^pow;

[~,t2]=divider(t1,t1,5,1);
x2= (t2);
y2= (t2).^pow;
r = (rand(1,length(t2)));

plot(x1,y1,'^-');hold on;
plot(x2.*r ,y2  ,'*');hold on;
% plot(x2  ,y2  ,'*');hold on;


%version 1.1
%isFair=1 adding points is based on distance isFair=2 adding of points based on edges
function   [X,Y]=divider(X,Y,n,isFair)



try
    if isFair==1
    else
        isFair=0 ;
    end
catch
    
isFair=0;
end
switch isFair
    case 0
T1=0;
T2=0;

for i=1:length(X)-1
    temp1=0;
    temp1=linspace(X(i),X(i+1),n+2)  ;
    
    T1=[T1,temp1(1:end-1)];
end
T1=[T1,temp1(end)];
X=T1(2:end);


for i=1:length(Y)-1
    temp2=0;
    temp2=linspace(Y(i),Y(i+1),n+2)  ;
    
    T2=[T2,temp2(1:end-1)];
end
T2=[T2,temp2(end)];
Y=T2(2:end);
    case 1

dists= sqrt( (X(2:end)-X(1:end-1)).^2 + (Y(2:end)-Y(1:end-1)).^2) ;


n1=round((dists./min(dists))*n);
T1=0;
T2=0;

for i=1:length(X)-1
  
    temp1=0;
    temp1=linspace(X(i),X(i+1),n1(i)+2)  ;
    
    T1=[T1,temp1(1:end-1)];
end
T1=[T1,temp1(end)];
X=T1(2:end);


for i=1:length(Y)-1
    temp2=0;
    temp2=linspace(Y(i),Y(i+1),n1(i)+2)  ;
    
    T2=[T2,temp2(1:end-1)];
end
T2=[T2,temp2(end)];
Y=T2(2:end);
end


end

نمونه خروجی:

 دانلود سورس کد

سوالی داشتین پیام بدین.

 

۰ نظر موافقین ۰ مخالفین ۰ ۱۴ تیر ۰۱ ، ۲۰:۴۱
موسی حسن زاده