Elipsoide en GraphicsComplex
Estoy tratando de usar Ellipsoiden a GraphicsComplexy estoy atascado. Tengo entendido GraphicsComplexque las asignaciones explícitas de coordenadas de puntos se reemplazan con valores enteros que apuntan a una lista de coordenadas.
Entonces en lugar de
Graphics3D[Sphere[{0, 0, 0}, 1]]
Puedo usar
Graphics3D[GraphicsComplex[{{0, 0, 0}}, Sphere[1, 1]]]
en lugar. Tenga en cuenta que el primer argumento de Spherese reemplaza con el primer punto de la lista, es decir, {0,0,0} mientras que el segundo argumento se identifica correctamente como radio (no coordenada) y no se reemplaza con {0,0,0}.
Si uso Ellipsoiden su lugar, entonces en lugar de
Graphics3D[Ellipsoid[{0, 0, 0}, {2, 3, 4}]]
yo suelo
Graphics3D[GraphicsComplex[{{0, 0, 0}}, Ellipsoid[1, {2, 3, 4}]]]
Me sale un error:
Affine transform 1 should be one of the forms {{{xx, yx, zx}, {xy, yy, zy}, {xz, yz, zz}}, {tx, ty, tz}}; {{xx, yx, zx}, {xy, yy, zy}, {xz, yz, zz}}; or {tx, ty, tz}.
y
Coordinate index 0 is out of range for the enclosing GraphicsComplex.
Dos preguntas: ¿uso GraphicsComplexincorrectamente? y ¿hay una solución alternativa sencilla para alimentar Ellipsoida un GraphicsComplex?
Respuestas
Tenga en cuenta que Ellipsoidse renderiza usando GeometricTransformationdebajo del capó:
ToBoxes @ Graphics3D[Ellipsoid[{1,1,1}, {2,3,4}]]
Graphics3DBox [InterpretationBox [GeometricTransformation3DBox [SphereBox [{0, 0, 0}], {{{2, 0, 0}, {0, 3, 0}, {0, 0, 4}}, {1, 1, 1 }}], Elipsoide [{1, 1, 1}, {2, 3, 4}]]]
Básicamente, una esfera en el origen es trasladada y transformada por el GeometricTransformation3DBoxpara que se vea como la deseada Ellipsoid. Ahora, observe que el centro de Ellipsoides parte del argumento de transformación. Desafortunadamente, GraphicsComplexsolo puede manejar índices de coordenadas cuando están dentro de una primitiva gráfica normal, en este caso dentro de SphereBox. Esta es la razón GraphicsComplexde Ellipsoidesto no funciona. Considere la GraphicsComplexversión correspondiente :
ToBoxes @ Graphics3D[GraphicsComplex[{{1,1,1}}, Ellipsoid[1, {2, 3, 4}]]]
Graphics3DBox [GraphicsComplex3DBox [{{1, 1, 1}}, InterpretationBox [GeometricTransformation3DBox [SphereBox [{0, 0, 0}], {{{2, 0, 0}, {0, 3, 0}, {0, 0, 4}}, 1}], elipsoide [1, {2, 3, 4}]]]]
Si GraphicsComplex3DBoxpudiera entender que el 1interior GeometricTransformation3DBoxrepresenta el punto, {1, 1, 1}entonces se representaría correctamente. Sin embargo, es complicado averiguar qué partes de dicha lista corresponden a un punto, por lo que se GraphicsComplex3DBoxrinde.