Search code examples
matlabmatlab-figure

How to generate a dome by using points in MATLAB


I am trying to generate a semi ellipsoidal dome shape by using x, y, z values. In my code below, I define the x,y,z values but I am unable to assign those values to sphere.

How do I resolve this?

clc    
x = [65 55.2125 50.8267 46.7398 42.9232 39.3476 35.9815 32.7882 29.7175 26.6833 23.4690 18.7605];
y = x;
z = [0.0,0.9,2.7,5.2,8.2,11.8,15.8,20.3,25.2,30.7,37.1,47.5]; % max height of dome is 47.5
[x,y,z] = sphere(20);     
x = x(12:end,:);       
y = y(12:end,:);      
z = z(12:end,:);       
r = 65;                % radius of the dome 
surf(r.*x,r.*y,r.*z); 
axis equal; 

Solution

  • It will be simpler or at least more elegant to use the parametric equations of an ellipsoide.

    % semi axis parameters
    a = 65;       % x-axis 
    b = 65;       % y-axis
    c = 47.5;     % z-axis
    
    %% Parametrisation
    %
    %  To reach each point of the ellipsoide we need two angle:
    %  phi   ∈ [0,2𝜋]
    %  theta ∈ [0, 𝜋]
    % 
    %  But since we only need half of an ellipsoide we can set
    %  theta ∈ [0,𝜋/2]
    
    [theta,phi] = ndgrid(linspace(0,pi/2,50),linspace(0,2*pi,50));
    x = a*sin(theta).*cos(phi);
    y = b*sin(theta).*sin(phi);
    z = c*cos(theta);
    
    %plot
    surf(x,y,z)
    axis equal
    

    Result:

    enter image description here