Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Python] 3d графика, нужно нарисовать поверхность заданную пл 
:(
    Опции темы
mathbeginer
Дата 1.4.2011, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 1.4.2011

Репутация: нет
Всего: нет



Помогите переложить на Питон. 

В самом общем случае некотарая замкнутая поверхность задана площадками (четыре или три точки с координатами x,y,z). По сути, эти данные представляют собой готовые фарсеты и для их построения есть инструмент в matlab (его у меня нет) и ему подоббных инструментов. Удалось нарисовать поверхности в octave
Код

#!/usr/bin/octave -q
M=load('surf');
x=reshape(M(:,1),4,[]);
y=reshape(M(:,2),4,[]);
z=reshape(M(:,3),4,[]);
surface(x,y,z,ones(size(x)))




Данные: координаты точек площадок, расположены в простом текстовом файле, так
Код

$ cat surf

-0.0191470260 0.0002018149 0.9398515351
0.1828156130 0.0002134162 0.9423499325
0.1801296040 0.0324976465 0.9422050977
-0.0191470260 0.0002018149 0.9398515351


-0.0191470260 0.0002018149 0.9398515351
0.1801296040 0.0324976465 0.9422050977
0.1722740070 0.0639799463 0.9416690758
-0.0191470260 0.0002018149 0.9398515351


-0.0191470260 0.0002018149 0.9398515351
0.1722740070 0.0639799463 0.9416690758
0.1594417556 0.0938763691 0.9407592382
-0.0191470260 0.0002018149 0.9398515351

...

 

PM MAIL   Вверх
Daevaorn
Дата 1.4.2011, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: нет
Всего: 70



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 
PM MAIL WWW   Вверх
afiskon
Дата 1.4.2011, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 31.3.2011
Где: Россия, Москва

Репутация: нет
Всего: 4



Все это конечно здорово, только вы вопрос не сформулировали.
PM MAIL WWW   Вверх
mathbeginer
Дата 1.4.2011, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 1.4.2011

Репутация: нет
Всего: нет



Цитата(afiskon @ 1.4.2011,  22:14)
Все это конечно здорово, только вы вопрос не сформулировали.

Я прошу помочь переложить на Питон любую строчку (строчки).  Проблемы следующие:

1. Если ли в matplotlib или mayavi или еще гдето в Питоне функция аналогичная surface из осктайва, которая может принять координаты площадок и нарисовать поверхность. (не нашел я сам, либо сказывается очень плохое знание английсского, либо нифига matplotlib не  aka MatLab в 3D)

2. не могу считать из файла (веду борьбу с синтаксисом), например, хочу пока просто сохранить в вектора x,y,z координаты, в x бросить первый столбец x=M[0,:] (вроден по докам numpay array д.б. так), но вижу ошибки
Код

from numpy import *
M = [[float(i) for i in line.split()] for line in open('surf')]
print M[0,:]

print M[0,:]
TypeError: list indices must be integers, not tuple


склоняюсь что получился список, но попытки перевода c array(M) не приводят к успеху.

3. если 1 и 2 успешны, скорее всего сам сделаю reshape


P.S. с Питоном дел не имел совсем. Но рисовать в нем решил, т.к. средства графики octave ограничены, например изменить прозрачность оказалось проблемой, да и в дальнейшем придеться вводить данные для расчетов интерактивно + численные расчеты перевожу с C++ на Питон (потестил матричные расчеты, они быстрее чем в C++, если работать с матрицами и готовыми функциями). Главное сдвинуться с мертвой точки с синтаксисом.

Это сообщение отредактировал(а) mathbeginer - 1.4.2011, 22:52
PM MAIL   Вверх
mathbeginer
Дата 2.4.2011, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 1.4.2011

Репутация: нет
Всего: нет



вариант считывания данных и их расположения в формате  принятом в Матлаб для построение поверхности по площадкам нашел
Код

#!/usr/bin/python
import numpy as np
import scitools.filetable as ft
f=open('surf','r')
x, y , z=ft.read_columns(f);
print x
X=np.transpose(np.reshape(x,(np.size(x)/4,4)))
print X


но не удается найти команды построения графика поверхности.

Вопрос: какой командой нарисовать поверхность?  Должна быть команда типа surf, patch и тому подобное 
(вот классика из matlab http://www.mathworks.com/help/techdoc/visu...e/f2-11758.html)

P.S. инет перерыл, мусора навалом, в общем ПА-А-МА-А- ГИ-И-И-ТЕ   smile 

Это сообщение отредактировал(а) mathbeginer - 2.4.2011, 09:39
PM MAIL   Вверх
NuINu
Дата 9.4.2011, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 19.7.2008

Репутация: нет
Всего: 6



вам нужно установить пакет matplotlib для питона - позволяет рисовать хорошие графики, но если вам нужна прозрачность, то графики придеться рисовать в ручную используя опенгл пакет PyOpenGL

Если хотите что то делать на питоне, изучите его

конкретно, для рисования трехмерной поверхности  в  matplotlib  используется  plot_surface
в пакете matplotlib есть примеры использования

думаю проблема будет в том что из ваших данных не возможно будет собрать сеть по координатам х и у, посмотрев на ваши данные я вижу что ваши маленькие квадратные поверхности не совсем квадратные.  хотя возможно вы делаете там не функцию f(x,y)=z , а f(x,z)=y?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0456 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.