Панда как инструмент научной графики?
|
|
math-beginer | Дата: Понедельник, 18.04.2011, 13:23 | Сообщение # 1 |
Рядовой
Группа: Пользователи
Сообщений: 2
Награды: 0
Репутация: 0
Статус: Offline
| Ищу инструмент обладающий следующими возможностями: 1. отображает трехмерные замкнутые поверхности, которые заданы численно (т.е. координаты вершин четырех-угольных и трех-угольных площадок храняться в обычном текстовом файле) 2. позволяет построить сечение сцены (несколько трехмерных поверхностей) 3. позволяет статические картинки сохранять в файл Подходит ли Панда? И нет ли примеров отображения поверхности, заданной как в п.1 (пример, в котором Панда идет по лесу я посмотрел :-)) ? P.S. "Не движки", например http://code.enthought.com/projects/mayavi/docs/development/html/mayavi/mlab.html не устраивают тем, что в них в "базовые рисователи " расчитаны на функции z=f(x,y) которых у меня нет (у меня числа в файле, которые соответствуют маленьким площадкам)
Сообщение отредактировал math-beginer - Понедельник, 18.04.2011, 13:27 |
|
| |
dis_node | Дата: Понедельник, 18.04.2011, 21:18 | Сообщение # 2 |
Лейтенант
Группа: Пользователи
Сообщений: 56
Награды: 0
Репутация: 2
Статус: Offline
| В формате EGG модель хранится в виде списков полигонов (в текстовом виде), в разделе файлы есть описание формата, конвертер написать не сложно. Есть прямой доступ к вершинам, но встроенных аналитических функций я не видел. Срез визуально сделать можно (простое отсечение бесконечной плоскостью), но возможно сечется только перпендикулярно экрану. Вообще Панда не ориентирована на математическое моделирование.
|
|
| |
ninth | Дата: Вторник, 19.04.2011, 00:51 | Сообщение # 3 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| С сечениями думаю можно извернуться, зная математическую часть, но в общем могу лишь добавить к предыдущему посту, что в твоём случае самый простой вариант написать небольшой конвертер в какой-нить общераспространённый формат, например *.OBJ и дальше работать в специализированном софте - например CAD системах, которые по определению должны уметь делать сечения. Ну или в программе 3D моделирования многие из которых тоже это умеют. Если информация в твоём файле уже структурирована, т.е. есть инфа о том какие вершины каким полигонам ("площадкам") принадлежат, то написать конвертер не сильно сложно.
|
|
| |
BlackCat | Дата: Вторник, 19.04.2011, 05:16 | Сообщение # 4 |
Подполковник
Группа: Проверенные
Сообщений: 144
Награды: 0
Репутация: 1
Статус: Offline
| Хм, а что, SolidWorks не подходит для твоих целей?
http://alphahole.do.am - версия 0.015 вышла 22.02.10
|
|
| |
math-beginer | Дата: Вторник, 19.04.2011, 20:07 | Сообщение # 5 |
Рядовой
Группа: Пользователи
Сообщений: 2
Награды: 0
Репутация: 0
Статус: Offline
| Quote (BlackCat) Хм, а что, SolidWorks не подходит для твоих целей? мне бы свободный софт и под линукс Добавлено (19.04.2011, 20:07) ---------------------------------------------
Quote (ninth) например *.OBJ А вы не могли бы дать ссылочку на подробное описание формата. достаточно ли просто поставить v перед моими вершинами, т. е . так : Code v -0.0191470260 0.0002018149 0.9398515351 v 0.1722740070 0.0639799463 0.9416690758 v 0.1594417556 0.0938763691 0.9407592382 v -0.0191470260 0.0002018149 0.9398515351
v -0.0191470260 0.0002018149 0.9398515351 v 0.1594417556 0.0938763691 0.9407592382 v 0.1433816565 0.1227894883 0.9434250944 v -0.0191470260 0.0002018149 0.9398515351
... здесь первые четыре строчки координаты углов (вершин) первой площадки (сегмента), далее следующие четыре строчки описывают вторую плошадку, и так далее
|
|
| |
dis_node | Дата: Вторник, 19.04.2011, 20:42 | Сообщение # 6 |
Лейтенант
Группа: Пользователи
Сообщений: 56
Награды: 0
Репутация: 2
Статус: Offline
| http://panda3d.org.ru/load/egg_spravka_v_chm/3-1-0-26 Недостаточно, придется компоновать данные по другому. Не теряй время, скриптуй в спецсофте. Видел кстати бесплатный CAD на Питоне (если это рулит), гугл те в помощь ).
|
|
| |
BlackCat | Дата: Среда, 20.04.2011, 05:39 | Сообщение # 7 |
Подполковник
Группа: Проверенные
Сообщений: 144
Награды: 0
Репутация: 1
Статус: Offline
| Quote (math-beginer) мне бы свободный софт и под линукс А в сторону VRML не смотрели? Там всё описывается примитивами. По идее может подойти. http://ru.wikipedia.org/wiki/VRML http://ru.wikipedia.org/wiki/X3D http://ru.wikipedia.org/wiki/WebGL http://ru.wikipedia.org/wiki/3DMLW
http://alphahole.do.am - версия 0.015 вышла 22.02.10
|
|
| |
ninth | Дата: Четверг, 21.04.2011, 01:43 | Сообщение # 8 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| BlackCat, я думаю тут не важно через какой формат obj или vrml - кому что удобнее ) dis_node, хм, подкинь инфу по CAD на питоне )) Я когда-то искал но не нашёл ничего подходящего - самое близкое это фреймворк, ориентированный на CAD. math-beginer, если под линукс, то пока самая вменяемая альтернатива - Blender - сечения можно построить с помощю булевых операций, ну а по части визуализации вопросов возникнуть не должно. По формату - в obj немного другое строение - отдельно описываются вершины, отдельно - связи между вершинами. Т.е. нужно прочитать все вершины в список. Сделать ещё один список, удалить из него дубли вершин, проиндексировать и на основе этих двух построить связи. В коде выглядеть будет проще чем описал ) Строк 20 потребуется. Вопрос только с твоим форматом: насколько я понимаю, у тебя просто список координат, отделяются они пробелом, тройки и четвёрки вершин отделяются пустой строкой? Неплохо было бы кинуть сюда пример файла.
|
|
| |
ninth | Дата: Четверг, 21.04.2011, 02:22 | Сообщение # 9 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Если моё предположение верно, то у меня получилась такая штука из того что ты привёл как пример, толькоя убирал 'v ' Листинг полученного OBJ: Code v 0.1594417556 0.0938763691 0.9407592382 v 0.1722740070 0.0639799463 0.9416690758 v -0.0191470260 0.0002018149 0.9398515351 v 0.1433816565 0.1227894883 0.9434250944
f 1 2 3 1 f 1 3 4 1 Один момент - в фэйсах у тебя первая и последняя вершина совпадают - это излишне, поэтому для нормального отображения поверхности я удалял лишние ссылки на вершины перед импортом в блендер, т.е. получал В конвертере я это удаление не предусматривал т.к. не знаю фишка это твоего формата или баг приведённой геометрии ) Код конвертера (питон, естесно): Code lines = open('testvert.txt', 'r').readlines() vtx = {} idx = 1 for line in lines: if line != '\n': x, y, z = line.split(' ') if not (x, y, z) in vtx.keys(): vtx[(x, y, z)] = idx idx += 1 fcs,fc = [], [] for line in lines: if line == '\n': fcs.append(fc) fc = [] else: x, y, z = line.split(' ') fc.append(str(vtx[(x, y, z)])) f = open('out.obj', 'w') for v in vtx: f.write('v ' + ' '.join(v)) f.write('\n') for fc in fcs: f.write('f ' + ' '.join(fc) + '\n') f.close()
|
|
| |