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
4530
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
4530
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
4530
Используется синтаксис 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
4530
Все равно я не понимаю, что Вам нужно. Можно построить ограничивающие тело поверхности. Ниже текст (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, Супермодераторы



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

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


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

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