Drawing a rotating circle on a sphere
8 views (last 30 days)
Show older comments
Julian Blackthorne
on 23 Sep 2021
Commented: Julian Blackthorne
on 23 Sep 2021
I am trying to rotate a sphere like the eye on MATLAB and would like to simulate the pupil on the sphere that moves with the rotations as well.
[X,Y,Z] = sphere;
s1 = surf(X,Y,Z, 'FaceColor', [1 1 1], 'EdgeColor', 'none');
set(gca,'Color','k')
xdir = [1 0 0];
ydir = [0 1 0];
zdir = [0 0 1];
rotate(s1,zdir,10);
rotate(s1,ydir,10);
rotate(s1,xdir,10);
I have written a code for a sphere that rotates but I cannot figure out how to get the pupil plotted on the sphere centre so that the final figure after rotation looks somewhat like this -
0 Comments
Accepted Answer
Fabio Freschi
on 23 Sep 2021
Edited: Fabio Freschi
on 23 Sep 2021
The code should be self-explicative
[X,Y,Z] = sphere;
% figure
figure, hold on
axis equal, view([1 1 1]);
% sphere with transparence
s1 = surf(X,Y,Z, 'FaceColor', [1 1 1], 'EdgeColor', 'none','FaceAlpha',0.5);
light
% I don't like black background
% set(gca,'Color','k')
% radius of the eye (to be more general)
R = max(sqrt(X(:).^2+Y(:).^2+Z(:).^2));
% radius of the pupil
r = 0.6;
% distance from the center
h = sqrt(R^2-r^2);
% create disc
n = 30;
a = linspace(0,2*pi,n);
s2 = fill3(h*ones(n,1),r*cos(a(:)),r*sin(a(:)),'b');
% rotation
xdir = [1 0 0];
ydir = [0 1 0];
zdir = [0 0 1];
rotate(s1,zdir,10);
rotate(s1,ydir,10);
rotate(s1,xdir,10);
% rotation of pupil
rotate(s2,zdir,10);
rotate(s2,ydir,10);
rotate(s2,xdir,10);
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!