Сдвинуть фигуру по 3D-пути в PythonPython

Программы на Python
Ответить
Anonymous
 Сдвинуть фигуру по 3D-пути в Python

Сообщение Anonymous »

Как можно с помощью Python (3.10.14 на момент написания статьи) построить объект 3D-сетки (который можно сохранить в формате STL, PLY или GLB/GLTF), используя:
  • 3D-путь в качестве оси развертки
  • 2D-прямоугольная форма
с этими ограничениями:
  • 3D-путь — это настоящий трехмерный путь, что означает, что каждая координата изменяется в пространстве; он не содержится в одной плоскости.
  • верхний и нижний края прямоугольника всегда должны быть горизонтальными (это означает, что не происходит крена, т. е. нет вращения фигуры во время развертки). вдоль 3D-оси)
  • 3D-путь всегда проходит перпендикулярно через центр прямоугольника
?
Мы можем рассматривать 3D-траекторию как состоит только из прямых сегментов (без кривых). Это означает, что два сегмента 3D-оси встречаются под углом, т. е. что производная в этой точке не является непрерывной. Полученная 3D-сетка не должна иметь дыр в этих местах. Следовательно, «стиль 3D-соединения» должен определяться с использованием заданного стиля заглушки (например, как описано здесь для двух измерений).
3D-путь задается в виде цифрового 3D-массива следующим образом:

Код: Выделить всё

import numpy as np

path = np.array([
[ 5.6, 10.1,  3.3],
[ 5.6, 12.4,  9.7],
[10.2, 27.7, 17.1],
[25.3, 34.5, 19.2],
[55. , 28.3, 18.9],
[80.3, 24.5, 15.4]
])
2D-прямоугольная форма представлена ​​как функция многоугольника Shapely 2.0.3:

Код: Выделить всё

from shapely.geometry import Polygon

polygon = Polygon([[0, 0],[1.2, 0], [1.2, 0.8], [0, 0.8], [0, 0]])
Чего я достиг на данный момент
В настоящее время я пробую Trimesh 4.2.3 (доступен Numpy 1.26.4), используя swap_polygon< /code> но безуспешно, потому что каждый раз, когда прямоугольнику приходится менять направление, он также вращается вокруг оси, перпендикулярной плоскости, определенной двумя краями, встречающимися в той вершине, где меняется направление, нарушая второе ограничение выше. p>

Код: Выделить всё

import numpy as np
from shapely.geometry import Polygon
from trimesh.creation import sweep_polygon

polygon = Polygon([[0, 0],[1.2, 0], [1.2, 0.8], [0, 0.8], [0, 0]])
path = np.array([
[ 5.6, 10.1,  3.3],
[ 5.6, 12.4,  9.7],
[10.2, 27.7, 17.1],
[25.3, 34.5, 19.2],
[55. , 28.3, 18.9],
[80.3, 24.5, 15.4]
])
mesh = sweep_polygon(polygon, path)
Кроме того, в документе Sweep_polygon говорится:

Плохо справляется с резкой кривизной.< /p>

что немного неясно.
Изображение

Сетка визуализируется в Meshlab. Наклон фигуры хорошо виден, когда она поднимается вправо.
Конечная цель — запустить ее в контейнере Docker на автономном сервере.

Подробнее здесь: https://stackoverflow.com/questions/782 ... -in-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»