Elipsoide en GraphicsComplex

Sep 23 2020

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

2 CarlWoll Sep 22 2020 at 23:59

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.