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

У меня есть файл данных, который является результатом числового вычисления. В этом файле задается определенное количество как функция сферических углов r(th, ph).

th ph r
0.012 1.456 24
0.014 1.25 23.5
......

Сферические углы охватывают всю параметрическую поверхность сферы, но НЕ образуют явной сетки. Для простоты предположим, что сферические углы случайны.

Я хотел бы построить поверхность, соответствующую этим данным. Обратите внимание, что поверхность, которую я рисую, не выпуклая.

Я прошел через matlibplot и Mayavi, и во всех случаях мне нужно предоставить 2D-массив, которого у меня нет.


person Aleksejs Fomins    schedule 12.10.2016    source источник
comment
Что вы уже пробовали в Python? Какие модули вы используете? Можете ли вы привести пример входных данных?   -  person tommy.carstensen    schedule 12.10.2016
comment
до сих пор я пробовал python plot_surface() и Mayavi mesh(), но оба работают только с обычными сетками.   -  person Aleksejs Fomins    schedule 12.10.2016
comment
Не могли бы вы сделать двухмерный полярный график? matplotlib.org/examples/pylab_examples/polar_demo.html Вы проверили этот пример? stackoverflow.com/questions/25236026 /   -  person tommy.carstensen    schedule 12.10.2016
comment
Неа, хочу в 3D :) Пример полезный. Я могу, конечно, отображать данные на прямоугольнике, затем интерполировать, а затем отображать обратно на сферу, так что я не совсем в растерянности. Но я надеялся, что эта проблема достаточно распространена, чтобы решение уже существовало.   -  person Aleksejs Fomins    schedule 12.10.2016
comment
ОК, я думаю, это то, что вы хотите: ком/вопросы/36816537/   -  person tommy.carstensen    schedule 12.10.2016
comment
Да ладно, чувак, я прямо написал, что plot_surface не работает с нестандартными данными. В примере, которым вы делитесь, они используют функцию диапазона для регулярной выборки по сферическому углу.   -  person Aleksejs Fomins    schedule 12.10.2016


Ответы (1)


Я не знаю, полностью ли я понял ваш вопрос, но я все равно попытался представить возможный график (используя plot_surface AND plotly) сглаженной, частично случайной поверхности и полностью случайной (с r = f (тета, фи)).

import scipy.signal as scsi
import numpy
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# FIRST WAY: make just a strange  sphere (it works even if not continuous) - it seems a nice vase
theta = linspace(0,2*pi,100) 
phi = linspace(0,pi,100) + scsi.savgol_filter(numpy.random.normal(1.5,0.5, 100),11,2)
r = scsi.savgol_filter(numpy.random.normal(2,0.2,theta.shape[0]),11,3)
# N.B. you can use the savgol_filter to 'fit' a presupposed random noise

# SECOND WAY: this is instead flat random
theta = numpy.random.uniform(0,pi, 100)
phi = numpy.random.uniform(0, pi, 100)
# this would be your r = f(theta, phi)
r = theta*2 + phi # random function

x = r*outer(cos(theta),sin(phi))
y = r*outer(sin(theta),sin(phi))
z = r*outer(ones(100),cos(phi))

# plotting (std)
fig = plt.figure(figsize=(10,10))
ax = fig.gca(projection='3d')
ax.plot_surface(x,y,z, alpha=0.1)
plt.draw()
plt.show()

Ниже приведены стандартные выходные данные для двух «путей» (в порядке, указанном в коде): введите здесь описание изображениявведите здесь описание изображения

сюжетная версия (тот же порядок представления):

# PLOTLY VERSION - DYNAMIC PLOTTING
import plotly
import plotly.plotly as py
from plotly.graph_objs import *

data = Data([ Surface(x=x, y=y, z=z) ])
fig = Figure(data=data)
py.iplot(fig, filename='bloch-sphere-surface')

введите описание изображения здесьвведите здесь описание изображения

person Garini    schedule 30.08.2017