
Draw a circle for arbitrary orientation on spherical surface
    13 views (last 30 days)
  
       Show older comments
    
I would like to draw a circular  loop on spherical surface for a fixed  orientation of theta(i.e. polar angle on sphere) and variying the azimuthal angle. The following code only generates the circle which are  parallel to the equiatorial plane, but I need arbitrary orientation of ploar angle on the sphere. Pl somebody help me.
clear; clc;
N=10;
[X,Y,Z]=sphere(N);
C=zeros(N+1,N+1);
x=7;
y=1;
r=10;
for i=1:N+1
    for j=1:N+1
        d=sqrt(((i-x)^2)+((j-y)^2));
        if (d<=r)
            C(i,j)=1;
        end
    end
end
figure
surf(X,Y,Z,C)
axis equal
0 Comments
Accepted Answer
  Jim Riggs
      
 on 7 Feb 2020
        
      Edited: Jim Riggs
      
 on 7 Feb 2020
  
      My approach is to define the circle around the X-axis, then rotate it into the desired position through a Yaw-Pitch rotation.

% Specify the user inputs
Rmag= 10;   % Sphere radius
radius = 1; % circle radius
psi = 30*pi/180;    % yaw rotation angle
theta = -45*pi/180; % pitch rotation angle (negative rotation is up)
% Define vectors and Calculate the YAW-PITCH transformation matrix
alpha = asin(radius/Rmag);  
YAW = [cos(psi), -sin(psi), 0; sin(psi), cos(psi), 0; 0, 0, 1]; % Planar YAW rotation
PITCH = [cos(theta), 0, sin(theta); 0,1,0; -sin(theta), 0, cos(theta)]; % Planar PITCH rotation
YP = YAW*PITCH; % YAW-PITCH rotation matrix
% Rc = Column Vector pointing to circle on X-Axis (start point)
Rc = [Rmag*cos(alpha); 0; radius];  
R = YP*[Rmag; 0; 0]; % Vector pointing to Circle center 
% Now sweep the Rc vector around the X-axis to generate the circle 
% This is done by adding a planar ROLL rotation to YP
clear C
C = [];  % C is the vector containing the circle X-Y-Z cordinates
for phi = 0:pi/50:2*pi
    ROLL = [1, 0, 0;  0, cos(phi), -sin(phi); 0, sin(phi), cos(phi) ]; 
    YPR = YP*ROLL;  % 3-dimentional transform
    Rnew = YPR*Rc;
    C = [C, Rnew];
end
% plot the result
[Sx,Sy,Sz]=sphere(50);
figure;
mesh(Rmag.*Sx, Rmag.*Sy, Rmag.*Sz);  % draw the sphere
hold on;
plot3([0, R(1)], [0, R(2)], [0,R(3)], 'r'); % Vector to Circle center
plot3(C(1,:), C(2,:),C(3,:), 'b'); % Circle 
axis equal
6 Comments
  Adam Danz
    
      
 on 7 Feb 2020
				Also, make sure the circle isn't appearing on the other side of the sphere that is not visible from the view point. 
There are two solutions to that
1) use view(az,el) to rotate the plot. 
2) make the sphere partially transparent.
More Answers (0)
See Also
Categories
				Find more on Surface and Mesh Plots in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

