%% 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 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) 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 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 if (angl>pi && angl<2*pi) angl=- (2*pi-angl); end case 2 if (angl>180 && angl<360) angl=- (360-angl); end end end