Drawing a rotating circle on a sphere
8 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Julian Blackthorne
am 23 Sep. 2021
Kommentiert: Julian Blackthorne
am 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 Kommentare
Akzeptierte Antwort
Fabio Freschi
am 23 Sep. 2021
Bearbeitet: Fabio Freschi
am 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);
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Surface and Mesh Plots finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!