Я взаимодействую с внешней программой с Mathematica. Я создаю входной файл для внешней программы. Речь идет о преобразовании данных геометрии из графики, сгенерированной Mathematica, в предопределенный формат. Вот пример геометрии.
Рисунок 1
Геометрия может быть описана многими способами в Mathematica. Один из трудоемких способов заключается в следующем.
dat={{1.,-1.,0.},{0.,-1.,0.5},{0.,-1.,-0.5},{1.,-0.3333,0.},{0.,-0.3333,0.5},
{0.,-0.3333,-0.5},{1.,0.3333,0.},{0.,0.3333,0.5},{0.,0.3333,-0.5},{1.,1.,0.},
{0.,1.,0.5},{0.,1.,-0.5},{10.,-1.,0.},{10.,-0.3333,0.},{10.,0.3333,0.},{10.,1.,0.}};
Show[ListPointPlot3D[dat,PlotStyle->{{Red,PointSize[Large]}}],Graphics3D[{Opacity[.8],
Cyan,GraphicsComplex[dat,Polygon[{{1,2,5,4},{1,3,6,4},{2,3,6,5},{4,5,8,7},{4,6,9,7},
{5,6,9,8},{7,8,11,10},{7,9,12,10},{8,9,12,11},{1,2,3},{10,12,11},{1,4,14,13},
{4,7,15,14},{7,10,16,15}}]]}],AspectRatio->GoldenRatio]
При этом создается необходимая 3D-геометрия в формате GraphicsComplex
MMA.
Эта геометрия описана как следующий входной файл для моей внешней программы.
# GEOMETRY
# x y z [m]
NODES 16
1. -1. 0.
0. -1. 0.5
0. -1. -0.5
1. -0.3333 0.
0. -0.3333 0.50. -0.3333 -0.5
1. 0.3333 0.
0. 0.3333 0.5
0. 0.3333 -0.5
1. 1. 0.
0. 1. 0.5
0. 1. -0.5
10. -1. 0.
10. -0.3333 0.
10. 0.3333 0.
10. 1. -0.
# type node_id1 node_id2 node_id3 node_id4 elem_id1 elem_id2 elem_id3 elem_id4
PANELS 14
1 1 4 5 2 4 2 10 0
1 2 5 6 3 1 5 3 10
1 3 6 4 1 2 6 10 0
1 4 7 8 5 7 5 1 0
1 5 8 9 6 4 8 6 2
1 6 9 7 4 5 9 3 0
1 7 10 11 8 8 4 11 0
1 8 11 12 9 7 9 5 11
1 9 12 10 7 8 6 11 0
2 1 2 3 1 2 3
2 10 12 11 9 8 7
10 4 1 13 14 1 3
10 7 4 14 15 4 6
10 10 7 15 16 7 9
# end of input file
Теперь описание, которое я получил из документации этой внешней программы, довольно короткое. Я цитирую это здесь.
- Первое ключевое слово NODES указывает общее количество узлов. После этой строки не должно быть комментариев или пустых строк. Следующие строки состоят из трех значений координат узлов x, y и z, а количество строк должно совпадать с количеством узлов.
- Следующее ключевое слово — ПАНЕЛЬ. Оно указывает, сколько панелей у нас есть. После этого у нас есть линии, определяющие каждую панель. Первое целое число определяет тип панели
- ID 1 — четырехугольная панель — определяется четырьмя узлами и четырьмя соседними панелями. Соседние панели — это панели, которые имеют одни и те же стороны (пара узлов) и необходимы для расчета скорости и давления (методы 1 и 2). Отсутствующие соседи (например, для панелей рядом с задней кромкой) заполняются значением 0 (см. Рисунок 1).
- ID 2 — треугольная панель — определяется тремя узлами и тремя соседними панелями.
- ID 10 — панель следа — четырехугольная панель, определенная четырьмя узлами и двумя (соседними) панелями, расположенными на задней кромке (панели, к которым применяется панель следа Кутта). состояние).
- Типы панелей 1 и 2 должны быть определены до типа 10 во входном файле. Важно отметить, что поверхность нормальна; порядок узлов, определяющих панели, должен быть против часовой стрелки. По правилу правой руки, если пальцы согнуты, чтобы следовать нумерации, большой палец покажет вектор нормали, который должен указывать «внешнюю» геометрию.
Вызов!!
Нам предоставляется 3D-модель CAD в файле с именем One.obj, и она отлично экспортируется в ММА.
cd = Import["One.obj"]
Результатом является объект MMA Graphics3D
Теперь я могу легко получить доступ к данным геометрии, так как MMA считывает их изнутри.
{ver1, pol1} = cd[[1]][[2]] /. GraphicsComplex -> List;
MyPol = pol1 // First // First;
Graphics3D[GraphicsComplex[ver1,MyPol],Axes-> True]
- Как мы можем использовать информацию о вершинах и полигонах, содержащуюся в
ver1
иpol1
, и записать их в текстовый файл, как описано в примере входного файла выше. В этом случае у нас будут только панели типа ID2 (треугольные). - Используя триангуляцию Mathematica, как найти площадь поверхности этого трехмерного объекта. Есть ли встроенная функция, которая может вычислять площадь поверхности в ММА?
- Сейчас нет необходимости создавать панель пробуждения или элементы типа ID10. Входной файл только с треугольными элементами будет в порядке.
Извините за такой длинный пост, но это головоломка, которую я пытаюсь решить в течение длительного времени. Надеюсь, что у некоторых из вас, экспертов, может быть правильное понимание, чтобы взломать его.
BR