Добро пожаловать, гость
:: алгоритмы  и методы :: :: олимпиадные задачи :: :: связь :: :: о сайте :: :: форум ::

Форум работает в режиме архива, только для чтения и поиска.
Архив 2004 Архив 2007 Архив 2013

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.09.2010, 13:44
Новичок

Отправить личное сообщение для d.dragon.n76 Посмотреть профиль Найти все сообщения от d.dragon.n76
 
Регистрация: 26.12.2008
Сообщений: 24

3D поверхность в Python
Помогите найти алгоритм построения поверхности в Питон или описание порядка расположения точек в массивах X, Y, Z. Алгоритм скорее всего один и для Питона, и для C++, например. Но для C++ z не нашел.

точки я читаю из файла, и формат его такой, сначала идут координаты вершин первой элементарной площадки, зачем второй ...
Код:
$ cat data.txt 
-3.5453532005 -1.2945206358 2.3019377358
-3.5817236434 -2.3326455834 1.7469796037
-3.2584007852 -2.2306977781 1.7469796037
-3.5453532005 -1.2945206358 2.3019377358


-3.5453532005 -1.2945206358 2.3019377358
-3.2584007852 -2.2306977781 1.7469796037
-3.3659225510 -1.2379438722 2.3019377358
-3.5453532005 -1.2945206358 2.3019377358

-3.3659225510 -1.2379438722 2.3019377358
-3.2584007852 -2.2306977781 1.7469796037
-2.9768526261 -1.7430420618 1.7469796037
-3.3659225510 -1.2379438722 2.3019377358

-3.3659225510 -1.2379438722 2.3019377358
-2.9768526261 -1.7430420618 1.7469796037
-3.2096751106 -0.9673153668 2.3019377358
-3.3659225510 -1.2379438722 2.3019377358
ориентируясь на один и тот же пример, размноженный в инете написал такой скрипт
Код:
$ cat my_figure.py 
#!/usr/bin/python
import pylab
from mpl_toolkits.mplot3d import Axes3D
from numpy import *
import numpy
import matplotlib
x,y,z = loadtxt('data.txt', usecols=[0,1,2], unpack=True)
print "data from data.txt = ", x,y,z
X, Y = numpy.meshgrid(x,y)
Z = matplotlib.mlab.griddata(x,y,z,X,Y,interp='nn')
fig = pylab.figure()
axes = Axes3D(fig)
axes.plot_surface(X, Y, Z)
pylab.show()
но, рисует он явно не четыре площадки.

А вот так скрипт нарисовал эллипсоид


Uploaded with ImageShack.us

эллипсоид нормальный, в гнуплот например,



Uploaded with ImageShack.us

гнуплот не устраивает из-за того, что рисует проволочную поверхность
  #2  
Старый 01.10.2010, 15:00
Новичок

Отправить личное сообщение для d.dragon.n76 Посмотреть профиль Найти все сообщения от d.dragon.n76
 
Регистрация: 26.12.2008
Сообщений: 24

Помогите понять порядок заполнения двумерных матриц. Вот рабочий пример.

Код:
$ cat test.py 
#!/usr/bin/python
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = Axes3D(fig)
u = np.linspace(0, np.pi, 6)
v = np.linspace(0, 0.2*np.pi, 6)
x = np.outer(np.cos(u), np.sin(v))
y = np.outer(np.sin(u), np.sin(v))
z = np.outer(np.ones(np.size(u)), np.cos(v))
print "x = ", x 
print "y = ", y
print "z = ", z 
ax.plot_surface(x, y, z,  rstride=1, cstride=1, color='b')
plt.show()

$ ./test.py
x =  [[ 0.          0.12533323  0.24868989  0.36812455  0.48175367  0.58778525]
 [ 0.          0.10139672  0.20119435  0.29781902  0.38974691  0.47552826]
 [ 0.          0.0387301   0.0768494   0.11375674  0.14887007  0.18163563]
 [-0.         -0.0387301  -0.0768494  -0.11375674 -0.14887007 -0.18163563]
 [-0.         -0.10139672 -0.20119435 -0.29781902 -0.38974691 -0.47552826]
 [-0.         -0.12533323 -0.24868989 -0.36812455 -0.48175367 -0.58778525]]
y =  [[  0.00000000e+00   0.00000000e+00   0.00000000e+00   0.00000000e+00
    0.00000000e+00   0.00000000e+00]
 [  0.00000000e+00   7.36690263e-02   1.46176248e-01   2.16378183e-01
    2.83167705e-01   3.45491503e-01]
 [  0.00000000e+00   1.19198988e-01   2.36518138e-01   3.50107255e-01
    4.58174971e-01   5.59016994e-01]
 [  0.00000000e+00   1.19198988e-01   2.36518138e-01   3.50107255e-01
    4.58174971e-01   5.59016994e-01]
 [  0.00000000e+00   7.36690263e-02   1.46176248e-01   2.16378183e-01
    2.83167705e-01   3.45491503e-01]
 [  0.00000000e+00   1.53483874e-17   3.04547216e-17   4.50807666e-17
    5.89958610e-17   7.19805555e-17]]
z =  [[ 1.          0.9921147   0.96858316  0.92977649  0.87630668  0.80901699]
 [ 1.          0.9921147   0.96858316  0.92977649  0.87630668  0.80901699]
 [ 1.          0.9921147   0.96858316  0.92977649  0.87630668  0.80901699]
 [ 1.          0.9921147   0.96858316  0.92977649  0.87630668  0.80901699]
 [ 1.          0.9921147   0.96858316  0.92977649  0.87630668  0.80901699]
 [ 1.          0.9921147   0.96858316  0.92977649  0.87630668  0.80901699]]
  #3  
Старый 01.10.2010, 15:15
MBo MBo вне форума
Местный

Отправить личное сообщение для MBo Посмотреть профиль Найти все сообщения от MBo
 
Регистрация: 21.09.2006
Адрес: Новосибирск
Сообщений: 1,374

>Помогите понять порядок заполнения двумерных матриц
u задать от 10 до 90 c шагом 10, v от 1 до 9 с шагом 1, x = u+v, и порядок сразу будет виден
  #4  
Старый 01.10.2010, 16:01
Новичок

Отправить личное сообщение для d.dragon.n76 Посмотреть профиль Найти все сообщения от d.dragon.n76
 
Регистрация: 26.12.2008
Сообщений: 24

всеравно не пойму в каком порядке множество точек (x_i,y_i,z_i) скидывать в двумерные массивы. Наверняка, какая-то теория где-то есть :-)

Код:
$ cat test_order.py 
#!/usr/bin/python
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = Axes3D(fig)
u = np.linspace(10, 30, 3)
v = np.linspace(1, 3, 3)
print u , v
x = np.outer(u+v,u)
y = np.outer(u-v,v)
z = np.outer(np.ones(np.size(u)), v)
print "x = ", x 
print "y = ", y
print "z = ", z 
ax.plot_surface(x, y, z,  rstride=1, cstride=1, color='b')
plt.show()

$ ./test_order.py
[ 10.  20.  30.] [ 1.  2.  3.]
x =  [[ 110.  220.  330.]
 [ 220.  440.  660.]
 [ 330.  660.  990.]]
y =  [[  9.  18.  27.]
 [ 18.  36.  54.]
 [ 27.  54.  81.]]
z =  [[ 1.  2.  3.]
 [ 1.  2.  3.]
 [ 1.  2.  3.]]
 


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Аналог vector-а в Python Ilya Porublyov Реализация, исходники, языки 3 28.12.2009 05:22
Падение стержней на плоскую поверхность strvl Математические алгоритмы (другое) 0 15.01.2009 15:30