Я использую tetgen, чтобы попытаться создать полый купол. Я использовал треугольник, а затем просто триангулировал круг и поднимал значения z в соответствии с уравнением z = sqrt (abs (r^2 - x^2 - y^2)), но я очень сильно растягивался вблизи краев.Использование tetgen или треугольника (или сетки) для создания полого купола
Поэтому я хотел бы просто создать кучу точек этого купола, а затем сшить его, не заполнив его. Tetgen в основном делает это для меня, предоставляя файл .node и .faces, но проблема в том, что я все еще получаю дно, и я не уверен, как избавиться от него. Я довольно новичок в tetgen и meshpy, поэтому, если бы кто-нибудь мог дать мне рабочий поток для этого, я бы очень признателен. Ответ может быть очень простым.
Например, я могу создать точки вокруг нижней части круга с простой функцией:
def gen_pts_on_circle(num_pts, radius):
pnts = []
theta = 360.0/num_pts
# loop through circle using theta for point placement
for i in np.arange(0, 360, theta):
x = radius * np.cos(np.radians(i))
y = radius * np.sin(np.radians(i))
z = 0.0
pnts.append((x,y,z))
return np.array(pnts)
Тогда я генерировать случайные точки на куполе с помощью функции:
def gen_random_pts(num_pts, radius):
pts = []
for i in xrange(num_pts):
q = np.random.random() * (np.pi * 2.0)
r = np.sqrt(np.random.random())
x = (radius * r) * np.cos(q)
y = (radius * r) * np.sin(q)
# Just the sphere equation with abs value to make a dome
z = np.sqrt(abs(r**2 - x**2 - y**2))
pts.append((x,y,z))
return np.array(pts)
Затем я просто удаляю заголовок из файла .node и запускаю tetgen для получения файла .face. Единственная проблема с этим подходом - это дно, когда мне нужно, чтобы он был открытым куполом.
Я бы предпочел использовать meshpy, но генерировать эти точки, а затем подачи его в meshpy как и не возвращает ничего ...
from meshpy.tet import MeshInfo, build
# Generating all of the points using the functions
pts_circ = gen_pts_on_circle(100, 5)
points = np.vstack((pts_circle, gen_random_pts(500, 5)))
# Building with tet
mesh_info = MeshInfo()
mesh_info.set_points(points)
mesh = build(info)
печати np.array (mesh.facets) и печати np.array (mesh.points) теперь представляют собой просто пустые массивы.
Есть ли у кого-нибудь идеи о том, как использовать meshpy, не устанавливая также все грани, или используя этот метод сборки для построения граней, подобных командной строке tetgen? Это действительно не избавляет от моей проблемы, что нижняя часть купола не открыта, но что-то я пытался выработать. Любая помощь будет принята с благодарностью. Благодаря!
Можете ли вы предоставить (в своем первоначальном посте) минимальный код, который устанавливает геометрию купола? –