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

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

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

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

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

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

سه شنبه, ۲۸ تیر ۱۴۰۱، ۰۸:۲۷ ب.ظ

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

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

جواب: مبداء صفحات فضایی در صورتی که ثابت 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

نمونه خروجی:

دانلود کد:

 

 

موافقین ۰ مخالفین ۰ ۰۱/۰۴/۲۸
موسی حسن زاده

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی