2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Исключить точки для построения поверхности.Mathlab
Сообщение10.11.2013, 11:41 


20/10/12
235
Здравствуйте, уважаемые участники форума!
На днях я столкнулся с необходимостью исключить точки для построения поверхности в 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 


20/10/12
235
Код:
%\\\\\\\\\\\\\\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 
Заслуженный участник


20/07/09
4026
МФТИ ФУПМ
Не мучайтесь, постройте вот так
$x=a\ch \theta \cos \varphi, y=b\ch \theta \sin \varphi, z=c \sh \theta$
Или вам вот прямо нужно в декартовых?

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


20/10/12
235
В том-то и дело.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group