Ellipsoïde dans GraphicsComplex

Sep 23 2020

J'essaye d'utiliser Ellipsoiddans un GraphicsComplexet je suis bloqué. À ma connaissance, les GraphicsComplexaffectations de coordonnées de points explicites sont remplacées par des valeurs entières pointant vers une liste de coordonnées à la place.

Donc au lieu de

 Graphics3D[Sphere[{0, 0, 0}, 1]]

je peux utiliser

 Graphics3D[GraphicsComplex[{{0, 0, 0}}, Sphere[1, 1]]]

au lieu. Notez que le premier argument de Sphereest remplacé par le premier point de la liste, c'est-à-dire {0,0,0} tandis que le deuxième argument est correctement identifié comme rayon (pas de coordonnée) et non remplacé par {0,0,0}.

Si j'utilise à la Ellipsoidplace, alors au lieu de

Graphics3D[Ellipsoid[{0, 0, 0}, {2, 3, 4}]]

j'utilise

Graphics3D[GraphicsComplex[{{0, 0, 0}}, Ellipsoid[1, {2, 3, 4}]]]

J'obtiens une erreur:

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}.

et

Coordinate index 0 is out of range for the enclosing GraphicsComplex.

Deux questions: est-ce que je n'utilise GraphicsComplexpas correctement? et y a-t-il une solution de contournement simple pour alimenter Ellipsoids à un GraphicsComplex?

Réponses

2 CarlWoll Sep 22 2020 at 23:59

Notez que cela Ellipsoidest rendu en utilisant GeometricTransformationsous le capot:

ToBoxes @ Graphics3D[Ellipsoid[{1,1,1}, {2,3,4}]]

Graphics3DBox [InterprétationBox [GeometricTransformation3DBox [SphereBox [{0, 0, 0}], {{{2, 0, 0}, {0, 3, 0}, {0, 0, 4}}, {1, 1, 1 }}], Ellipsoïde [{1, 1, 1}, {2, 3, 4}]]]

En gros, une sphère à l'origine est traduite et transformée par le GeometricTransformation3DBoxpour qu'elle ressemble à celle souhaitée Ellipsoid. Maintenant, notez que le centre de Ellipsoidfait partie de l'argument de transformation. Malheureusement, GraphicsComplexne peut gérer les indices de coordonnées que lorsqu'ils sont à l'intérieur d'une primitive graphique normale, dans ce cas à l'intérieur de SphereBox. Voilà pourquoi GraphicsComplexde Ellipsoidne fonctionne pas. Considérez la GraphicsComplexversion correspondante :

ToBoxes @ Graphics3D[GraphicsComplex[{{1,1,1}}, Ellipsoid[1, {2, 3, 4}]]]

Graphics3DBox [GraphicsComplex3DBox [{{1, 1, 1}}, InterprétationBox [GeometricTransformation3DBox [SphereBox [{0, 0, 0}]], {{{2, 0, 0}, {0, 3, 0}, {0, 0, 4}}, 1}], Ellipsoïde [1, {2, 3, 4}]]]]

Si GraphicsComplex3DBoxje pouvais comprendre que l' 1intérieur GeometricTransformation3DBoxreprésentait le point, {1, 1, 1}alors il rendrait correctement. Cependant, il est difficile de déterminer quelles parties d'une telle liste correspondent à un point, et GraphicsComplex3DBoxabandonne ainsi.