Как создать купол, используя точки в MATLAB - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь создать форму полуэллипсоидального купола, используя значения x, y, z. В приведенном ниже коде я определяю значения x, y, z, но не могу присвоить эти значения сфере.

Как мне решить эту проблему?

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; 

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

Будет проще или, по крайней мере, элегантнее использовать параметры c уравнений эллипсоида.

% 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

Результат:

enter image description here

0 голосов
/ 13 февраля 2020

Вы можете удалить нижнюю половину сферы, присвоив NaN s подходящим элементам x и y:

[x,y,z] = sphere(20);
I = (z<0);
x(I) = NaN;
y(I) = NaN;
surf(x,y,z)

enter image description here

...