Modelado implícitamente (la forma se describe completamente con una ecuación) a través de Mathematica utilizando geometrías básicas y operaciones booleanas. Tarea universitaria para la clase ME480 CAD 3DP de la Universidad de Washington sobre el uso avanzado del modelado 3D y la impresión 3D.
La mayor parte del modelo se crea mediante una adición booleana de una tira de Mobius a una esfera.
El código del modelo utilizado en Mathematica.
Código base cortesía del profesor Mark Ganter.
(Unión booleana.)
Unirse [f], g] := Min[f, g]
(Corte booleano)
cortar [f, g] := Max[f, -g]
(Traducciones)
TransX [f, s] := f /. x -> (x - s)
TransY [f], s] := f /. y -> (y - s)
TransZ[f, s] := f /. z -> (z - s)
(Rotar.)
Rotar RZ [f <], un] := f /. {x -> xCos[a] + ySin [a], y -> -xSin[a] + yCos[a}
Rotar Z [f], un] := rotateRZ[f, d2R[a]]
(Declarando una geometría primitiva: Esfera)
esfera[rad_] := x^2 + y^2 + z^2 - rad^2
(Declarando una geometría primitiva: Tira de Möbius -http://www.wolframalpha.com/input/?i=mobius+strip+Cartesian+equation)
Mobius[a_] := -a^2 y - 2 a x z + x^2 y - 2 x^2 z + y^3 - 2 y^2 z +
y z^2
(Creando una geometría: muckabout3)
muckabout3 = cortar [esfera[2.75], mobius[3]]
(Creando una geometría: trasn2rotatma3)
rotatemuckabout3 = rotateZ[muckabout3, 180]
transrotatema3 = transY[rotatemuckabout3, -0.5]
trans2rotatema3 = transX[transrotatema3, 0.5]
(Creando una geometría: trans2rotatma13)
transrotatema13 = transY[muckabout3, 0.5]
trans2rotatema13 = transX[transrotatema13, -0.5]
(Uniendo dos geometrías juntas.)
joinedmuckabout3 = join[trans2rotatema13, trans2rotatema3]
(Creando una geometría: transrttma32)
muckabout32 = cortar[esfera[6], mobius[3]]
rotatemuckabout32 = rotateZ[muckabout32, 180]
transrotatema32 = transX[rotatemuckabout32, 3]
transrtransma32 = transY[transrotatema32, 1]
transrttma32 = transZ[transrtransma32, -2.75]
(Uniendo dos geometrías juntas.)
joinmuck3s = join[joinedmuckabout3, transrttma32]
(Traza el modelo para una vista previa.)
plt = ContourPlot3D[joinmuck3s == 0, {x, -10, 10}, {y, -10, 10}, {z, -10, 10}
(Exporta tu modelo como un archivo STL.)
Exportar ["ISMmodel1.stl", plt, "STL"]
La ecuación ISM resultante.
Max[-7.5625 + x^2 + y^2 + z^2, 9 y - x^2 y - y^3 + 6 x z + 2 x^2 z + 2 y^2 z - y z^2]
Max[-7.5625 + x^2 + y^2 + z^2, -9 y + x^2 y + y^3 - 6 x z + 2 x^2 z + 2 y^2 z + y z^2]
Max[-7.5625 + x^2 + (0.5 + y)^2 + z^2, -9 (0.5 + y) + x^2 (0.5 + y) + (0.5 + y)^3 - 6 x z + 2 x^2 z + 2 (0.5 + y)^2 z + (0.5 + y) z^2]
Max[-7.5625 + (-0.5 + x)^2 + (0.5 + y)^2 + z^2, -9 (0.5 + y) + (-0.5 + x)^2 (0.5 + y) + (0.5 + y)^3 - 6 (-0.5 + x) z + 2 (-0.5 + x)^2 z + 2 (0.5 + y)^2 z + (0.5 + y) z^2]
Max[-7.5625 + x^2 + (-0.5 + y)^2 + z^2, 9 (-0.5 + y) - x^2 (-0.5 + y) - (-0.5 + y)^3 + 6 x z + 2 x^2 z + 2 (-0.5 + y)^2 z - (-0.5 + y) z^2]
Max[-7.5625 + (0.5 + x)^2 + (-0.5 + y)^2 + z^2, 9 (-0.5 + y) - (0.5 + x)^2 (-0.5 + y) - (-0.5 + y)^3 + 6 (0.5 + x) z + 2 (0.5 + x)^2 z + 2 (-0.5 + y)^2 z - (-0.5 + y) z^2]
Min[Max[-7.5625 + (0.5 + x)^2 + (-0.5 + y)^2 + z^2, 9 (-0.5 + y) - (0.5 + x)^2 (-0.5 + y) - (-0.5 + y)^3 + 6 (0.5 + x) z + 2 (0.5 + x)^2 z - (-0.5 + y) z^2], Max[-7.5625 + (-0.5 + x)^2 + (0.5 + y)^2 + z^2, -9 (0.5 + y) + (-0.5 + x)^2 (0.5 + y) + (0.5 + y)^3 - 6
Max[-36 + x^2 + y^2 + z^2, 9 y - x^2 y - y^3 + 6 x z + 2 x^2 z + 2 y^2 z - y z^2]
Max[-36 + x^2 + y^2 + z^2, -9 y + x^2 y + y^3 - 6 x z + 2 x^2 z + 2 y^2 z + y z^2]
Max[-36 + (-3 + x)^2 + y^2 + z^2, -9 y + (-3 + x)^2 y + y^3 - 6 (-3 + x) z + 2 (-3 + x)^2 z + 2 y^2 z + y z^2]
Min[Max[-7.5625 + (0.5 + x)^2 + (-0.5 + y)^2 + z^2, 9 (-0.5 + y) - (0.5 + x)^2 (-0.5 + y) - (-0.5 + y)^3 + 6 (0.5 + x) z + 2 (0.5 + x)^2 z + 2 (-0.5 + y)^2 z - (-0.5 + y) z^2], Max[-7.5625 + (-0.5 + x)^2 + (0.5 + y)^2 + z^2, -9 (0.5 + y) + (-0.5 + x)^2 (0.5 + y)
Источник модели
