%%%%%%%%%%%%%%%%%%%%%%%%%%-----------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='2x+6y+5z+0';%% 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 passPoint1.deg=0;%format degree passPoint1.deg=deg2rad(passPoint1.deg); passPoint1.p=cos(passPoint1.deg); passPoint1.q=sin(passPoint1.deg); 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 orignPoint.x=-scalerVal/coff(1); orignPoint.y=0; orignPoint.z=0; passPoint1.ft=-(coff(2)/coff(1))*passPoint1.p -(coff(3)/coff(1))*passPoint1.q-scalerVal/coff(1); passPoint1.x=[passPoint1.ft;orignPoint.x]; passPoint1.y=[passPoint1.p;orignPoint.y]; passPoint1.z=[passPoint1.q;orignPoint.z]; 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 orignPoint.x=0; orignPoint.y=-scalerVal/coff(2); orignPoint.z=0; passPoint1.ft=-(coff(1)/coff(2))*passPoint1.p -(coff(3)/coff(2))*passPoint1.q-scalerVal/coff(2); passPoint1.x=[passPoint1.p;orignPoint.x]; passPoint1.y=[passPoint1.ft;orignPoint.y]; passPoint1.z=[passPoint1.q;orignPoint.z]; 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 surf(x ,y ,z ,'FaceColor','g');hold on 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 end surf(x ,y ,z ,'FaceColor','g');hold on plot3(passPoint1.x,passPoint1.y,passPoint1.z,'r-','LineWidth',2);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