Я думаю, у вас есть два варианта: 1) создать вторую часть геометрии, а затем написать алгоритм пересечения граней и граней, чтобы объединить их. 2) создайте вторую часть геометрии и напишите две функции, которые возвращают -1, если точка запроса находится внутри геометрии, и +1, если она находится снаружи (подойдут другие значения). Затем используйте RegionPlot3D[ f1[x,y,z]<0 || f2[x,y,z]<0,....]
. Идея состоит в том, чтобы извлечь GraphicsComplex
и использовать это. Вопрос будет в том, насколько хорошо вы можете приблизить углы с этим. Вот иллюстрация того, что я имею в виду.
if1[x_, y_, z_] := If[x^2 + y^2 + z^2 <= 1, -1, 1]
if2[x_, y_, z_] := If[(x - 1)^2 + y^2 <= 1 && -1.5 <= z <= 1.5, -1, 1]
res = RegionPlot3D[
if1[x, y, z] < 0 || if2[x, y, z] < 0, {x, -2, 2}, {y, -2,
2}, {z, -2, 2}, PlotPoints -> 100, Boxed -> False, Axes -> False]
Затем извлеките координаты и многоугольники.
coords = res[[1, 1]];
poly = Cases[res[[1]], _Polygon, Infinity];
Graphics3D[GraphicsComplex[coords, poly], Boxed -> False]
Надеюсь, это поможет.