Ellipsoid in GraphicsComplex

Sep 23 2020

Ich versuche Ellipsoidin einem zu verwenden GraphicsComplexund ich stecke fest. Nach meinem Verständnis werden GraphicsComplexexplizite Punktkoordinatenzuweisungen durch ganzzahlige Werte ersetzt, die stattdessen auf eine Liste von Koordinaten verweisen.

Also statt

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

ich kann nutzen

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

stattdessen. Beachten Sie, dass das erste Argument von Spheredurch den ersten Punkt aus der Liste ersetzt wird, dh {0,0,0}, während das zweite Argument korrekt als Radius (nicht Koordinate) identifiziert und nicht durch {0,0,0} ersetzt wird.

Wenn ich Ellipsoidstattdessen benutze , also statt

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

ich benutze

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

Ich erhalte eine Fehlermeldung:

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

und

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

Zwei Fragen: verwende ich GraphicsComplexfalsch? und gibt es eine einfache Abhilfe zu Futter Ellipsoids ein GraphicsComplex?

Antworten

2 CarlWoll Sep 22 2020 at 23:59

Beachten Sie, dass dies unter der Haube Ellipsoidgerendert wird GeometricTransformation:

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

Grundsätzlich wird eine Kugel am Ursprung durch die GeometricTransformation3DBoxso übersetzt und transformiert , dass sie wie gewünscht aussieht Ellipsoid. Beachten Sie nun, dass das Zentrum von EllipsoidTeil des Transformationsarguments ist. Leider GraphicsComplexkönnen Koordinatenindizes nur verarbeitet werden, wenn sie sich innerhalb eines normalen Grafikprimitivs befinden, in diesem Fall innerhalb von SphereBox. Aus diesem Grund ist GraphicsComplexder Ellipsoidnicht funktioniert. Betrachten Sie die entsprechende GraphicsComplexVersion:

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

Wenn GraphicsComplex3DBoxman verstehen könnte, dass das 1Innere GeometricTransformation3DBoxden Punkt darstellt {1, 1, 1}, würde es richtig rendern. Es ist jedoch schwierig herauszufinden, welche Teile einer solchen Liste einem Punkt entsprechen, und GraphicsComplex3DBoxgibt daher auf.