Ellissoide in GraphicsComplex

Sep 23 2020

Sto cercando di utilizzare Ellipsoidin a GraphicsComplexe sono bloccato. La mia comprensione GraphicsComplexè che le assegnazioni di coordinate del punto esplicite vengono sostituite con valori interi che puntano invece a un elenco di coordinate.

Quindi invece di

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

posso usare

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

anziché. Notare che il primo argomento di Sphereviene sostituito con il primo punto dalla lista, cioè {0,0,0} mentre il secondo argomento è correttamente identificato come raggio (non coordinate) e non sostituito con {0,0,0}.

Se uso Ellipsoidinvece, così invece di

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

Io uso

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

Ottengo un errore:

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

e

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

Due domande: uso in GraphicsComplexmodo errato? e c'è una semplice soluzione alternativa per inviare Ellipsoidi messaggi a un GraphicsComplex?

Risposte

2 CarlWoll Sep 22 2020 at 23:59

Nota che Ellipsoidè reso usando GeometricTransformationsotto il cofano:

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 }}], Ellissoide [{1, 1, 1}, {2, 3, 4}]]]

Fondamentalmente, una sfera all'origine viene traslata e trasformata da in GeometricTransformation3DBoxmodo che sembri quella desiderata Ellipsoid. Notate ora che il centro di Ellipsoidfa parte dell'argomento di trasformazione. Sfortunatamente, GraphicsComplexpuò gestire gli indici di coordinate solo quando sono all'interno di una normale primitiva grafica, in questo caso all'interno di SphereBox. Questo è il motivo GraphicsComplexper cui Ellipsoidnon funziona. Considera la GraphicsComplexversione corrispondente :

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}], Ellissoide [1, {2, 3, 4}]]]]

Se si GraphicsComplex3DBoxpotesse capire che l' 1interno GeometricTransformation3DBoxrappresenta il punto {1, 1, 1}, renderebbe correttamente. Tuttavia, è difficile capire quali parti di un tale elenco corrispondono a un punto, e così si GraphicsComplex3DBoxarrende.