Python, matplotlib(?), deformed wireframe

darin06

Задача нарисовать трехмерную поверхность сеткой (узлы потом можно пометить символами). Есть набор X, Y, Z координат, которые по-сути представляет собой деформированную сетку. На данный момент получается рисовать только 3D-scatter: только набор точек (вершин).

FRider

а например гнуплот чем не пойдет?

darin06

Не знаю, я просто привык делать графики в matplotlib (у последнего есть масса плюсов по сравнению с gnuplot).
Если ты знаешь как сделать такое в gnuplot подскажи.

FRider

вот тут например: http://cs.ecs.baylor.edu/~donahoo/tools/gnuplot/3Dex.html
не пойдет?

beluchy

в matplotlib традиционно плохо с 3d
в качестве 3d дополнения к нему юзай mayavi: http://mayavi.sourceforge.net/screenshots/index.html
текстовые метки для mayavi: http://web.archiveorange.com/archive/v/alwBjgpiKnOgo5i6pplO

darin06

http://matplotlib.org/examples/mplot3d/rotate_axes3d_demo.html
Нет. Дело в том, что на этом wireframe сохраняет форму сетки (прямоугольная она) в плоскости (x, y) т.е. по-сути Z функция от i,j-индексов массива. Интерсно, оно сможет нарисовать сетку, если у меня (x, y) от (i, j) зависит как x = i*dX + rnd(), y = j*dY + rnd(), abs(rnd()) < dX, dY;

darin06


Не очень понимаю что он рисует. Общий смысл ясен, но это не похоже на то, что я хочу. Главный вопрос как он выбрал где провести линии сетки и что они из себя представлют. В качестве входных массивов используются массивы 32х32.
Судя по-всему мне нужно нечто вроде triangular mesh.

beluchy

http://docs.enthought.com/mayavi/mayavi/auto/mlab_helper_fun...
Plots a surface using grid-spaced data supplied as 2D arrays.
Function signatures:
mesh(x, y, z, ...)
x, y, z are 2D arrays, all of the same shape, giving the positions of the vertices of the surface. The connectivity between these points is implied by the connectivity on the arrays.

darin06

Да, ты совершенно прав. Mayavi это, то что мне нужно. Задолбался его собирать только.

darin06

Вот, совсем другое дело, построено в MayaVi2.

beluchy

D
Оставить комментарий
Имя или ник:
Комментарий: