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

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

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

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

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

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

دوشنبه, ۱ اسفند ۱۴۰۱، ۰۴:۰۰ ب.ظ

رشد مستطیل در یک مسیر سینوسی روی یک صفحه فضایی

 

 

شما می توانید با تغییر معادله صفحه زیر  در سط 4،نمودار  سه بعدی  رشد یافته روی مسیر را روی آن صفحه مشاهده کنین.

f(p,q)=2*p  +2*q;

مثلا  می توانین  معادله صفحه در سط 4 را به فرم  2+ f(p,q)=2*p  +0.5*q;  تغییر دهین و نتیجه را مشاهده کنین.

حتی می تونین، به جای صفحه  معادله یک رویه را وارد کنین، مثلا سطر 4 را با معادله رویه f(p,q)=2*p  +.5*q+2*p*q; جایگزین کنین. و نتیجه شکل زیر را مشاهده کنین.

کد اجرایی:

clc;
clear;
close all;
syms p q X Y Z  yd(X) yl(X) f(p,q) ft(p,q) T xp(T) yp(T) zp(T)
f(p,q)=2*p  +2*q;
[p1,q1]=meshgrid( 0:.1:1 ,-1:.1:1 );
 surf(p1,q1,double(f(p1,q1)),FaceColor='g');alpha(.2);hold on;
 

t=linspace(0,1,100);
x=t;
y=sin(2*pi*x);yprim=2*pi*cos(2*pi*x);
plot3(x,y,f(x,y),'-r');hold on
n=length(t);
t1=linspace(0,1,200);
r=.08;
x1=r*sin(2*pi*t1);
y1=r*cos(2*pi*t1);
 
xM=[];
yM=[];
zM=[];

for s=1:length(t) -1

    %plot equLine for  slop and its 90 slop lines

    %% 
%     yprims =double((y(s+1)- y(s))/(x(s+1)- x(s)));
    yd(X)=yprim(s)*(X-x(s))+y(s);
    yl(X)=(-1./yprim(s))*(X-x(s))+y(s);
    tr=[x(s),x(s)+.00005 ];
    d1=diff( double(tr));
    d2=diff( double(yd(tr)));
    d3=diff( double(f(tr,yd(tr))));

    rd=[d1,d2,d3];
    xp(T)=x(s)+rd(1)*T;
    yp(T)=y(s)+rd(2)*T;
    zp(T)=double(f(x(s),y(s)))+rd(3)*T;
    tr1=double(solve((xp-x(s))^2+(yp-y(s))^2-r^2,T));
%     plot3(xp(tr1),yp(tr1) ,zp(tr1),'b-' );hold on
   


    %%

    d1=diff( double(tr));
    d2=diff( double(yl(tr)));
    d3=diff( double(f(tr,yl(tr))));

    r2=[d1,d2,d3];
%     r2=[1,double(yl(x(s)+1))-double(yl(x(s))),double(f(x(s)+1,double(yl(x(s)+1))))-double(f(x(s),double(yl(x(s)))))];
    xl(T)=x(s)+r2(1)*T;
    yl(T)=y(s)+r2(2)*T;
    zl(T)=double(f(x(s),y(s)))+r2(3)*T;
    tr2=(double(solve((xl-x(s))^2+(yl-y(s))^2-r^2,T)));
%     plot3(double(xl(tr2)),double(yl(tr2)) ,double(zl(tr2)),'c-' );hold on
    df=(double((yprim(s))))/abs(double((yprim(s))));
    
    if  df==-1
    tr2=tr2(end:df:1);
    end
    %%
%     plot3(x1+x(s),y1+y(s) ,double(f(x1+x(s),y1+y(s))),'b-' );hold on

    %%
    r3=double([subs(gradient(f ),[p,q],[x(s),y(s)])',-1]);
    xr=double(xl(tr2));
    yr=double(yl(tr2));
    zr=double(zl(tr2));

    xr0(T)=xr(1)+r3(1)*T;
    yr0(T)=yr(1)+r3(2)*T;
    zr0(T)=zr(1)+r3(3)*T; 
    
    xr1(T)=xr(2)+r3(1)*T;
    yr1(T)=yr(2)+r3(2)*T;
    zr1(T)=zr(2)+r3(3)*T; 
    tr3=[-.02,.02];
%     plot3(double([xr0(tr3),xr1([tr3(2),tr3(1)]),xr0(tr3(1))]),double([yr0(tr3),yr1([tr3(2),tr3(1)]),yr0(tr3(1))]),double([zr0(tr3),zr1([tr3(2),tr3(1)]),zr0(tr3(1))]));hold on
%     plot3(xr0(tr3),yr0(tr3),zr0(tr3),'*')
   
    xM=[xM;double([xr0(tr3),xr1([tr3(2),tr3(1)]),xr0(tr3(1))])];
    yM=[yM;double([yr0(tr3),yr1([tr3(2),tr3(1)]),yr0(tr3(1))])];
    zM=[zM;double([zr0(tr3),zr1([tr3(2),tr3(1)]),zr0(tr3(1))])];


  % peripendecular plane
  % peripendecular passpoints
    rpX=diff(double(xl(tr2))');
    rpY=diff(double(yl(tr2))') ;
    rpZ=diff(double(zl(tr2)'));
    B=[rpX,rpY,rpZ] ;
    
    C=double([subs(gradient(f ),[p,q],[x(s),y(s)])',-1]);
    C=cross(B,C);
    refPlane=C(1)*(X-x(s ))+C(2)*(Y-y(s))+C(3)*(Z-f(x(s ),y(s))) ;

    verPlaneCoff='XYZ';
    [~,ind]=find(C);
    ind=ind(end);
    in=find(~ismember([1,2,3],ind));

    ft(p, q)=subs(refPlane-C(ind)*sym(verPlaneCoff(ind)),[sym(verPlaneCoff(in(1))),sym(verPlaneCoff(in(2)))],[p,q]);
    ft=-(ft/C(ind));

      plot3(double([xr0(tr3),xr1([tr3(2),tr3(1)]),xr0(tr3(1))]),double([yr0(tr3),yr1([tr3(2),tr3(1)]),yr0(tr3(1))]),double([zr0(tr3),zr1([tr3(2),tr3(1)]),zr0(tr3(1))]),'r');hold on


% surf(double([xr0(tr3);xr1(tr3)]),double([yr0(tr3);yr1(tr3)]),double([zr0(tr3);zr1(tr3)]),FaceColor='g');hold on
% surf(double([xr0(tr3);xr1(tr3)]),double([yr0(tr3);yr1(tr3)]),double(ft(double([xr0(tr3);xr1(tr3)]),double([yr0(tr3);yr1(tr3)]))),FaceColor='b');hold on
plot3(double([xr0(tr3);xr1(tr3)])',double([yr0(tr3);yr1(tr3)])',double(ft(double([xr0(tr3);xr1(tr3)]),double([yr0(tr3);yr1(tr3)])))','b');hold on
plot3(double([xr0(tr3);xr1(tr3)]),double([yr0(tr3);yr1(tr3)]),double(ft(double([xr0(tr3);xr1(tr3)]),double([yr0(tr3);yr1(tr3)]))),'b');hold on



    view(3)
    xlabel('X');
    ylabel('Y');
    zlabel('Z');
%      axis equal
     pause(.0001)
end

axis equal
plot3(xM ,yM ,zM )
h=surf(xM ,yM ,zM ,'FaceColor','g');alpha(h,.1)

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

انمیشن ساعتگرد در صفحه فضایی

دسترسی به مختصات دلخواه در صفحه فضایی، تحت مختصات قطبی این امکان را فراهم می‌کند که براحتی اشای سه بعدی خود را در فضا رسم کنیم، در این پست سعی کردیم با ایجاد انمیشن خطی که به موازات آن صفحه فضایی عمود بر صفحه مرجع ایجاد خواهد شد را، نشان دهیم.

 کد ایجاد این انمیشن فضایی که در قالب کد اجرایی که قابل دانلود در بخش آخر این پست است، به شکل زیر است.

 for s=0:5:360

           
            passPoint1.deg=s;%format degree
            passPoint1.deg=deg2rad(passPoint1.deg);
            passPoint1.p=cos(passPoint1.deg);
            passPoint1.q=sin(passPoint1.deg);

            orignPoint.x=0;
            orignPoint.y=0;
            orignPoint.z=-scalerVal/coff(3);
            passPoint1.ft=-(coff(1)/coff(3))*passPoint1.p -(coff(2)/coff(3))*passPoint1.q-((scalerVal)/coff(3));
            passPoint1.x=[passPoint1.p;orignPoint.x];
            passPoint1.y=[passPoint1.q;orignPoint.y];
            passPoint1.z=[passPoint1.ft;orignPoint.z];
            
            h=plot3(passPoint1.x,passPoint1.y,passPoint1.z,'r-','LineWidth',2);hold on
             pause(.5)
            delete(h)
        end

در کد بالا دو نقطه انتخاب شده است که اولی نقطه ای به شعاع 1 در زوایه s( که بین 0 تا 360 درجه با فاصله 5 می باشد) و نقطه دوم مبداء صفحه می‌باشد. که با هر بار تغییر زاویه این خط تغییر می‌کند.

به دلیل طولانی بود کد اجرایی، فقط امکان دانلود آن وجود دارد.

 

نمونه فیلم خروجی:

 

 

 

دانلود کد اجرایی:

 

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

مختصات صفحه فضایی و نحوه درجه بندی آن

در پست های قبلی، نحوه رسم چند ضلعی یا نقطه یا نمودار روی صفحه فضایی را تشریح کردیم، اما سوال اینجاست که مبداء این صفحات فضایی کجاست؟

جواب: مبداء صفحات فضایی در صورتی که ثابت d در معادله صفحه ax+by+cz+d=0 برابر صفر باشد، همان (0،0،0) خواهد بود، اما در صورتی این ثابت برابر صفر نباشد مبداء آن  برابر با( 0,0,-d) خواهد بود. یعنی اگر بخواهیم نمودار یا نقطه ای را رسم کنیم، نسبت به مبداء صفحه فضایی رسم می‌شود.

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

جواب این است که همانطور که می توانیم یک چند ضلعی را در روی صفحه فضایی رسم کنیم، می توانیم زوایای آن را نیز مشخص کنیم.

برای این کار کافی است مختصات مورد نظر خودمان را تعیین کنیم، مثلا p1=cos(0) , q1=sin(0)  و تابع ft  این نقطه را محاسبه کنیم( که در کد زیر روش آن نشان داده شده است)، حالا اگر هدف ما این باشد که در زاویه صفر درجه صفحه عمود بر صفحه مرجع را پیدا کرده و شکل دلخواه خود را روی آن رسم کنیم، در آنصورت کافی است که با بدست اوردن دو نقطه  و بردار نرمال صفحه مرجع، که نقطه اول آن مبداء صفحه فضایی و نقطه دوم  مقدار p, q  و بردار نرمال صفحه مرجع صفحه عمود را در زوایه مد نظر رسم کنیم و سپس شکل دلخواه خود را روی صفحه عمود در زاویه مدنظر رسم کنیم.

این تکنیک به ما اجازه می ده که تسلط کاملی به فضای سه بعدی داشته باشیم، بدون اینکه نیازی باشد از دستگاه‌های مختصات کروی و... استفاده کنیم.

البته نحوه بدست آوردن صفحات عمود در پست‌های بعدی به شکل مفصل تشریح خواهد شد، در این پست صرفا هدف ما تعیین زوایای مرجع(0، 90، 180 و270) بود.

 

کد شناسای زوایای مرجع در صفحه فضایی

%% display angle point on plan  
        p1=cos(0);
        q1=sin(0);
        ft1=-(coff(1)/coff(3))*p1 -(coff(2)/coff(3))*q1-((scalerVal)/coff(3)) ;
        text(p1 ,q1 ,ft1,'0 deg'); hold on
        plot3(p1 ,q1 ,ft1,'*r'); hold on

        p2=cos(pi/2);
        q2=sin(pi/2);
        ft2=-(coff(1)/coff(3))*p2 -(coff(2)/coff(3))*q2-((scalerVal)/coff(3)) ;
        text(p2 ,q2 ,ft2,' 90 deg'); hold on
        plot3(p2 ,q2,ft2,'*r'); hold on


        p3=cos(pi);
        q3=sin(pi);
        ft3=-(coff(1)/coff(3))*p3 -(coff(2)/coff(3))*q3-((scalerVal)/coff(3)) ;
        text(p3 ,q3 ,ft3,' 180 deg'); hold on
        plot3(p3 ,q3 ,ft3,'*r'); hold on

        p4=cos(3*pi/2);
        q4=sin(3*pi/2);
        ft4=-(coff(1)/coff(3))*p4 -(coff(2)/coff(3))*q4-((scalerVal)/coff(3)) ;
        text(p4 ,q4 ,ft4,' 270 deg'); hold on
        plot3(p4 ,q4 ,ft4,'*r'); hold on

کد بالا بخشی از کد اصلی می‌باشد، شما در کد زیر می‌توانید با تغییر تابع صفحه که به فرم  plan='1x+1y+0z+3' در سطر 30 آورده شده موقعیت زوایای مرجع را روی آن مشاهده کنید.

 

کد اجرایی:

%%%%%%%%%%%%%%%%%%%%%%%%%%-----------software details-----------%%%%%%%%%%%%%%%%%%%%%%

%devloped in Iran(ardebil)                                       %
%Copyright (C) 2022(1401) by moussa hasanzadeh as the head devloper %%
%All rights reserved.                                             %
%programed in mathlab 2016
%gmail:mo30no@gmail.com
%phone 09147082079


%% clear and close all child forms
% delete(allchild(0));close all;
clear;
clc;

%% plot coordinates system in 3D area and labeling
plot3([-5;5] ,[-5;5]*0,[-5;5]*0,'k');hold on;
plot3([-5;5]*0,[-5;5],[-5;5]*0,'k');hold on
plot3([-5;5]*0,[-5;5]*0,[-5;5],'k');hold on
text([-6;6],[-6;6]*0,[-6;6]*0,{'-X','X'});hold on;
text([-6;6]*0,[-6;6],[-6;6]*0,{'-Y','Y'});hold on
text([-6;6]*0,[-6;6]*0,[-6;6],{'-Z','Z'});hold on
xlabel('X');
ylabel('Y');
zlabel('Z');


%% convert implicit plan formula as parametric form
syms x y z scalerVal t;
plan='1x+1y+0z+3';%% plan as inplicit form '2x+3y+1z+3'= pishfarz
% plan='-6x+5y-3z+0';%% plan perpendicular to '2x+3y+1z+0' pass from (-1 0 2) and (1 0 -2)


x=[-3:3];
y=[-3:3];
z=[-3:3];
%function to draw on the plan
side=50;
t=linspace(0,2*pi,side+1);
p=cos(t) ;%x coordinate
q=sin(t) ;% y coordinate

pluIdex1=strfind(plan,'+');%% find plus index in plan formula
minIdex2=strfind(plan,'-');
pluIdex=sort([pluIdex1,minIdex2]);

xIndex=strfind(plan, 'x' );
if isempty(xIndex)
    xIndex=1;
end

yIndex=strfind(plan, 'y' );
if isempty(yIndex)
    yIndex=2;
end

zIndex=strfind(plan, 'z' );
if isempty(zIndex)
    zIndex=3;
end

[~,indexVar]=sort([xIndex,yIndex,zIndex]);
cellCof=strsplit(plan,{'x','y','z','*'});

try
    cofX=str2double(cellCof{indexVar==1});
catch
    cofX=0;
end

try
    cofY=str2double(cellCof{indexVar==2});
catch
    cofY=0;
end

try
    cofZ=str2double(cellCof{indexVar==3});
catch
    cofZ=0;
end



scalerPlusIndex=strsplit(plan,'+');
isit=0;
%% extracting positive scaler
for s=1:length(scalerPlusIndex)
    scalerVal=str2num(scalerPlusIndex{s});
    if ~isempty(scalerVal)
        isit=1;
        break;
    else
        scalerVal=0;
    end
end

%% extracting negative scaler
if isit==0
    scalerMinusIndex=strsplit(plan,'-');
    for s=1:length(scalerMinusIndex)
        scalerVal=str2num(scalerMinusIndex{s});
        if ~isempty(scalerVal)
            scalerVal=-scalerVal;
            break;
        else
            scalerVal=0;
        end
    end
end

coff=[cofX,cofY,cofZ];


funcIndex=find(coff);funcIndex=funcIndex(end);
switch funcIndex
    case 1

        [y,z]=meshgrid(y,z);
        x=-(coff(2)/coff(1))*y -(coff(3)/coff(1))*z-scalerVal/coff(1);
        ft=-(coff(2)/coff(1))*p -(coff(3)/coff(1))*q-scalerVal/coff(1);
        plot3(ft,p,q);hold on

        %% display angle point on plan p1=cos(0);
        p1=cos(0);
        q1=sin(0);
        ft1=-(coff(2)/coff(1))*p1 -(coff(3)/coff(1))*q1-scalerVal/coff(1);
        text(ft1,p1 ,q1 ,'0 deg'); hold on
        plot3(ft1,p1 ,q1 ,'*r'); hold on

        p2=cos(pi/2);
        q2=sin(pi/2);
        ft2=-(coff(2)/coff(1))*p2 -(coff(3)/coff(1))*q2-scalerVal/coff(1);
        text(ft2,p2 ,q2 ,' 90 deg'); hold on
        plot3(ft2,p2 ,q2,'*r'); hold on


        p3=cos(pi);
        q3=sin(pi);
        ft3=-(coff(2)/coff(1))*p3 -(coff(3)/coff(1))*q3-scalerVal/coff(1) ;
        text(ft3,p3 ,q3 ,' 180 deg'); hold on
        plot3(ft3,p3 ,q3 ,'*r'); hold on

        p4=cos(3*pi/2);
        q4=sin(3*pi/2);
        ft4=-(coff(2)/coff(1))*p4 -(coff(3)/coff(1))*q4-scalerVal/coff(1);
        text(ft4,p4 ,q4 ,' 270 deg'); hold on
        plot3(ft4,p4 ,q4 ,'*r'); hold on



    case 2


        [x,z]=meshgrid(x,z);
        y=-(coff(1)/coff(2))*x -(coff(3)/coff(2))*z-scalerVal/coff(2);
        ft=-(coff(1)/coff(2))*p -(coff(3)/coff(2))*q-scalerVal/coff(2);
        plot3(p,ft,q);hold on

        %% display angle point on plan p1=cos(0);
        p1=cos(0);
        q1=sin(0);
        ft1=-(coff(1)/coff(2))*p1 -(coff(3)/coff(2))*q1-scalerVal/coff(2) ;
        text(p1 ,ft1,q1 ,'0 deg'); hold on
        plot3(p1 ,ft1,q1 ,'*r'); hold on

        p2=cos(pi/2);
        q2=sin(pi/2);
        ft2=-(coff(1)/coff(2))*p2 -(coff(3)/coff(2))*q2-scalerVal/coff(2);
        text(p2 ,ft2,q2 ,' 90 deg'); hold on
        plot3(p2 ,ft2,q2,'*r'); hold on


        p3=cos(pi);
        q3=sin(pi);
        ft3=-(coff(1)/coff(2))*p3 -(coff(3)/coff(2))*q3-scalerVal/coff(2) ;
        text(p3 ,ft3,q3 ,' 180 deg'); hold on
        plot3(p3 ,ft3,q3 ,'*r'); hold on

        p4=cos(3*pi/2);
        q4=sin(3*pi/2);
        ft4=-(coff(1)/coff(2))*p4 -(coff(3)/coff(2))*q4-scalerVal/coff(2) ;
        text(p4 ,ft4,q4 ,' 270 deg'); hold on
        plot3(p4 ,ft4,q4 ,'*r'); hold on



    case 3

        [x,y]=meshgrid(x,y);
        z=-(coff(1)/coff(3))*x -(coff(2)/coff(3))*y-scalerVal/coff(3);

        ft=-(coff(1)/coff(3))*p -(coff(2)/coff(3))*q-((scalerVal)/coff(3)) ;
        plot3(p ,q ,ft,'k-'); hold on

        %% display angle point on plan  
        p1=cos(0);
        q1=sin(0);
        ft1=-(coff(1)/coff(3))*p1 -(coff(2)/coff(3))*q1-((scalerVal)/coff(3)) ;
        text(p1 ,q1 ,ft1,'0 deg'); hold on
        plot3(p1 ,q1 ,ft1,'*r'); hold on

        p2=cos(pi/2);
        q2=sin(pi/2);
        ft2=-(coff(1)/coff(3))*p2 -(coff(2)/coff(3))*q2-((scalerVal)/coff(3)) ;
        text(p2 ,q2 ,ft2,' 90 deg'); hold on
        plot3(p2 ,q2,ft2,'*r'); hold on


        p3=cos(pi);
        q3=sin(pi);
        ft3=-(coff(1)/coff(3))*p3 -(coff(2)/coff(3))*q3-((scalerVal)/coff(3)) ;
        text(p3 ,q3 ,ft3,' 180 deg'); hold on
        plot3(p3 ,q3 ,ft3,'*r'); hold on

        p4=cos(3*pi/2);
        q4=sin(3*pi/2);
        ft4=-(coff(1)/coff(3))*p4 -(coff(2)/coff(3))*q4-((scalerVal)/coff(3)) ;
        text(p4 ,q4 ,ft4,' 270 deg'); hold on
        plot3(p4 ,q4 ,ft4,'*r'); hold on


end


surf(x ,y ,z ,'FaceColor','g');hold on


%%


axis equal
disp('');

%%%%%%%%%%%%%%%%%%%%%%%%%%-----------software details-----------%%%%%%%%%%%%%%%%%%%%%%

%devloped in Iran(ardebil)                                       %
%Copyright (C) 2022(1401) by moussa hasanzadeh as the head devloper %%
%All rights reserved.                                             %
%programed in mathlab 2016
%gmail:mo30no@gmail.com
%phone 09147082079

نمونه خروجی:

دانلود کد:

 

 

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