2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Как построить фигуру от трех переменных (isosurface)?
Сообщение30.08.2016, 15:15 


30/08/16
4
Подскажите, пожалуйста, как построить объемную фигуру, от трех перемеренных. Например,

Используется синтаксис Matlab M
x=0.1:0.05:1.7; %диапазоны значений трех переменных
y=0:0.05:1.4;
z=1:1:50;

 for k=1:length(z)
    for i=1:length(x)
        for j=1:length(y)
            v(i,j)=z(k)/(20*x(i)+y(j)*15); %вычисляем точки поверхности при каждом значении z (слои)
        end
    end
       surf(v) %рисуем текущую поверхность
       hold on
 end
 % получаем красивую фигуру слой за слоем.


Это объемная фигура толщина и смещение по горизонтали которой зависит от z (аффинное преобразование).
Что хочу я, так это преобразовать эту слоистую фигуру в объемное тело при помощи функции isosurface, но увы ничего не получается.

Пробовал так:

Используется синтаксис Matlab M
x=0.1:0.05:1.7;
y=0:0.05:1.4;
z=1:1:50;

[xx, yy, zz]= meshgrid(x, y, z);
v=zz./(20.*xx+yy.*15);
isosurface(v)



Рисуется непонятная плоская поверхность вместо объемной фигуры.

 Профиль  
                  
 
 Re: Как построить фигуру от трех переменных (isosurface)?
Сообщение30.08.2016, 17:56 
Заслуженный участник


12/07/07
4522
Siegurd в сообщении #1147821 писал(а):
Рисуется непонятная плоская поверхность вместо объемной фигуры.
view(3)

 Профиль  
                  
 
 Re: Как построить фигуру от трех переменных (isosurface)?
Сообщение30.08.2016, 18:09 


30/08/16
4
GAA в сообщении #1147879 писал(а):
Siegurd в сообщении #1147821 писал(а):
Рисуется непонятная плоская поверхность вместо объемной фигуры.
view(3)

isosurface(v) возвращает плоский треугольник, а не объемную фигуру. Как в первом куске кода. А view(3) просто задает положение обзора.

 Профиль  
                  
 
 Re: Как построить фигуру от трех переменных (isosurface)?
Сообщение30.08.2016, 18:14 
Заслуженный участник


12/07/07
4522
patch

 Профиль  
                  
 
 Re: Как построить фигуру от трех переменных (isosurface)?
Сообщение30.08.2016, 18:25 


30/08/16
4
GAA в сообщении #1147886 писал(а):
patch

Можно, пожалуйста подробнее?

 Профиль  
                  
 
 Re: Как построить фигуру от трех переменных (isosurface)?
Сообщение30.08.2016, 18:49 
Заслуженный участник


12/07/07
4522
Используется синтаксис Matlab M
x=0.1:0.05:1.7;
y=0:0.05:1.4;
z=1:1:50;
[xx,yy,zz] = meshgrid(x, y, z);
v=zz./(20*xx+yy*15);
patch(isosurface(xx,yy,zz,v,0.1));
view(3)
Рисуется ожидаемая, учитывая выражение для $v$, поверхность $v = 0.1$. Теперь Вы, точно, напишите какую «фигуру» надо построить. Поскольку в начальном сообщении не задано тело и догадаться, что вам нужно построить, у меня не получается.

-- Вт 30.08.2016 17:52:06 --

Без matlab, просто запишите выражения, задающие тело, поверхность которого надо нарисовать.

Если же нужно нарисовать не поверхность тела, а нечто другое, то тоже хотелось бы понять --- что?

-- Вт 30.08.2016 18:02:19 --

Примитивный пример. Задан шар: $x^2+y^2+z^2 \le 1$. Надо построить его поверхность (сферу): $x^2+y^2+z^2 =1$

 Профиль  
                  
 
 Re: Как построить фигуру от трех переменных (isosurface)?
Сообщение31.08.2016, 10:05 


30/08/16
4
Фигура которая состоит из многих слоев трехмерных поверхностей строится по первому куску кода. Но, там просто много слоев, а я хочу их объединить в одно тело. Это то же самое что любую линию можно разбить на некоторое количество точек и любую поверхность можно разбить на некоторое количество кривых, но матлаб то нам рисует гладкие поверхности. Так же и с телом в пространстве. Его можно построить по кускам слой за слоем (как в первом куске кода), а можно соединить все слои чтобы получить Volume в котором не видно слоев.
Форма фигуры которую я хочу получить - в первом куске кода. Но как задать ее построение чтобы не было видно слоев я не понимаю и бьюсь уже 4й день над этим.

 Профиль  
                  
 
 Re: Как построить фигуру от трех переменных (isosurface)?
Сообщение31.08.2016, 17:45 
Заслуженный участник


12/07/07
4522
Все равно я не понимаю, что Вам нужно. Можно построить ограничивающие тело поверхности. Ниже текст (matlab 13) и картинка. Если запустите код и он у вас выполнится без ошибок, то можете повращать.
Используется синтаксис Matlab M
x_l = 0.1;  x_h = 1.7;  x =x_l:0.05:x_h;
y_l =   0;  y_h = 1.4;  y =y_l:0.05:y_h;  
z_l =   1;  z_h =  50;  z =z_l:1:z_h;      
hold on
 % Поверхности, ограничивающие тело сверху и снизу
 [xx,yy] = meshgrid(x, y);
 surf(xx, yy, z_h./(20*xx+15*yy)); surf(xx, yy, z_l./(20*xx+15*yy))
 % две боковушки: x = x_l и x = x_h
 [yy, zz] = meshgrid(y, z);
 surf(x_l+zeros(size(yy)), yy, zz./(20*x_l+15*yy)); surf(x_h+zeros(size(yy)), yy, zz./(20*x_h+15*yy))
 % две боковушки: y = y_l и y = y_h
 [xx,zz] = meshgrid(x, z);
 surf(xx, y_l + zeros(size(xx)), zz./(20*xx+15*y_l)); surf(xx, y_h+zeros(size(xx)), zz./(20*xx+15*y_h));
 view(3)
hold off
Вложение:
Комментарий к файлу: matlab 13
surf1.jpg
surf1.jpg [ 75.52 Кб | Просмотров: 0 ]

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

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



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

Сейчас этот форум просматривают: DariaRychenkova


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

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