2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Исключить точки для построения поверхности.Mathlab
Сообщение10.11.2013, 11:41 
Здравствуйте, уважаемые участники форума!
На днях я столкнулся с необходимостью исключить точки для построения поверхности в Matlab. Наверное, следует рассказать зачем мне это вообще - мне нужно построить однополостной гиперболоид $(x/a)^2+(y/b)^2-(z/c)^2=1$. Можно разбить поверхность на два куска и выразить их явно как $z=z(x,y)$. НО при вычислении корней в таких выражениях иногда получаются комплексные значения - Матлаб их игнорирует, но не совсем, и z в таких точках получается 0 (графически).

-- 10.11.2013, 11:46 --

Получается, нужно исключить эллипс значений.

-- 10.11.2013, 12:07 --

Вот как я пытался это сделать:
Код:
%\\\\\\\\\\\\\\2A\\\\\\\\\\\\\\\\\\\
%\\\\\Гиперболоид однополостный\\\\\
a1=8.398;
b1=2.502;
c1=-8.562;
x01=-1.81;
y01=-1.21;
z01=-1.11;
[X,Y]=meshgrid(-25:0.4:25,-10:0.4:10);
ROOT=((X - x01).^2)./a1.^2 + (( Y - y01 ).^2)./b1.^2 - 1;
for i=1:length(X)
for j=1:length(Y)
  if ROOT>=0
Z11=z01+sqrt(ROOT);%//first part
Z12=z01-sqrt(ROOT);%//second part
plot3(X,Y,Z11);%//first part
hold on;
plot3(X,Y,Z12);%//second part
  end
end
end

 
 
 
 Re: Исключить точки для построения поверхности.Mathlab
Сообщение10.11.2013, 14:36 
Код:
%\\\\\\\\\\\\\\2A\\\\\\\\\\\\\\\\\\\
%\\\\\Гиперболоид однополостный\\\\\
a1=8.398;
b1=2.502;
c1=-8.562;
x01=-1.81;
y01=-1.21;
z01=-1.11;

% Построение графика
figure('Name', 'Гиперболоид однополостный');
title('Гиперболоид однополостный');

xlabel('x');
ylabel('y');
zlabel('z');

[X,Y]=meshgrid(-25:0.25:25,-10:0.25:10);
Z11=z01+sqrt(((X - x01).^2)./a1.^2 + (( Y - y01 ).^2)./b1.^2 - 1);%//first part
Z12=z01-sqrt(((X - x01).^2)./a1.^2 + (( Y - y01 ).^2)./b1.^2 - 1);%//second part

ind = imag(Z11) > 0;
Z11(ind) = NaN;

surf(X,Y,Z11);   %//first part
hold on;

ind = imag(Z12) < 0;
Z12(ind) = NaN;

surf(X,Y,Z12);   %//second part

Сделал так, но теперь поверхность очень плохо смотрится и имеет разрыв.

-- 10.11.2013, 14:37 --

Загляните уже кто-нибудь в эту тему, я паникую :D

 
 
 
 Re: Исключить точки для построения поверхности.Mathlab
Сообщение10.11.2013, 14:58 
Не мучайтесь, постройте вот так
$x=a\ch \theta \cos \varphi, y=b\ch \theta \sin \varphi, z=c \sh \theta$
Или вам вот прямо нужно в декартовых?

 
 
 
 Re: Исключить точки для построения поверхности.Mathlab
Сообщение10.11.2013, 15:05 
В том-то и дело.

 
 
 [ Сообщений: 4 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group