Draw surface of a football (American)

8 views (last 30 days)
Hi everyone!
I got the following assignment:
Draw the surface of an american football which can be described with the following equation: within the interval The surface should look like this: I have the following code:
r = linspace(-1,1,21);
a = linspace(0,2*pi,63);
[R,A] = meshgrid(r,a);
X = R.*cos(A);
Y = R.*sin(A);
Z = acos(R);
surf(X,Y,Z);
axis equal
But every time I run the code, I get the following surface: What is it that I am doing wrong?
Thank you for any help that anyone could provide, in advance!

DGM on 5 Nov 2021
Edited: DGM on 5 Nov 2021
Two things to notice: note the way your points are spaced unevenly along z compared to the reference image. Also note the restricted domain of acos(). This problem would be easier approached by using z as the parameter instead of r.
z = linspace(-pi/2,pi/2,21);
th = linspace(0,2*pi,63).';
X = cos(z).*cos(th);
Y = cos(z).*sin(th);
Z = repmat(z,numel(th),1);
surf(X,Y,Z);
axis equal
colormap(jet) If you really wanted to do it your way, you could ...
clf; % reset web-plot
r = linspace(0,1,21);
a = linspace(0,2*pi,63);
[R,A] = meshgrid(r,a);
X = R.*cos(A);
Y = R.*sin(A);
Z = acos(R);
surf(X,Y,Z); hold on
surf(X,Y,-Z)
axis equal Szabolcs Simon-Guth on 5 Nov 2021
Thank you very much for your guidance! I'm new to MATLAB and I didn't think of the fact that the restricted domain, because I concentrated too much on the coding aspect, instead of the maths. Thank you again for all the help! :)

Yongjian Feng on 5 Nov 2021
Edited: Yongjian Feng on 5 Nov 2021
Hint: your assignment states z should be -Pi/2 < z < Pi/2.
But your r range is (-1, 1), which corresponds to z range 0<z< Pi
In other words, you plot the wrong range of Z. The first plot has Z from about -1.5 to 1.5.
Your plot has Z between 0 < Z < 3.
Szabolcs Simon-Guth on 5 Nov 2021
Alright! I understand. So, I'm going to include these parameters as well. Thank you very much for your help! I did not think of that.