Сглаживание региона?
Sep 25 2020
Есть 2D Pi
Мне удалось преобразовать его в 3D.
extrudeImage[image_] :=
Block[{res, img},
img = DeleteSmallComponents[Binarize[image, 0.9], 500];
res = ImageMesh[img];
RegionProduct[res, Line[{{0.}, {10.}}]]]
img = DeleteBorderComponents@
ImageResize[Import["https://i.stack.imgur.com/AM0gC.png"], 100];
r = Region[extrudeImage@img, Axes -> True,
AxesLabel -> {"X", "Y", "Z"}];
r = TransformedRegion[r, TranslationTransform[-RegionCentroid@r]]
Я попытался повернуть его, чтобы создать больше 3D Pi, но поверхность показалась слишком грубой, MMA не может экспортировать формат STL.
RegionUnion@
Table[TransformedRegion[r, RotationTransform[i, {0, 1, 0}]], {i, 0,
Pi/3, Pi/10}]
Export["test.stl", %]
Как сделать поверхность гладкой, чтобы можно было использовать 3D-принтер?
Ответы
9 xzczd Sep 25 2020 at 19:25
Вам нужно DiscretizeRegionи RepairMesh:
r = Region[extrudeImage@img, Axes -> True, AxesLabel -> {"X", "Y", "Z"}];
r2 = TransformedRegion[r, TranslationTransform[-RegionCentroid@r]];
r3 = DiscretizeRegion@r2 // RepairMesh
rfinal = RegionUnion@
Table[TransformedRegion[r3, RotationTransform[i, {0, 1, 0}]],
{i, 0, Pi/3, Pi/30}] // RepairMesh; // AbsoluteTiming
(* {117.008, Null} *)
Export["testfinal.stl", rfinal]
Обновить
DiscretizeRegionоказывается ненужным, потому что на выходе extrudeImageуже есть a MeshRegion, поэтому нам просто нужно:
r = extrudeImage@img
r2 = TransformedRegion[r, TranslationTransform[-RegionCentroid@r]]
r3 =
RegionUnion@
Table[TransformedRegion[r2 // RepairMesh, RotationTransform[i, {0, 1, 0}]], {i, 0,
Pi/3, Pi/75}]; // AbsoluteTiming
(* {0.296961, Null} *)
Export["test3.stl", r3]
Обратите внимание, что последний RepairMeshтакже был удален, потому что r3 == RepairMesh@r3он оказался True.