Эллипсоид в GraphicsComplex
Я пытаюсь использовать Ellipsoidв, GraphicsComplexи я застрял. Насколько я понимаю GraphicsComplex, явные назначения координат точки заменяются целочисленными значениями, указывающими на список координат.
Так что вместо
Graphics3D[Sphere[{0, 0, 0}, 1]]
я могу использовать
Graphics3D[GraphicsComplex[{{0, 0, 0}}, Sphere[1, 1]]]
вместо. Обратите внимание, что первый аргумент Sphereзаменяется первой точкой из списка, то есть {0,0,0}, тогда как второй аргумент правильно определяется как радиус (не координата) и не заменяется на {0,0,0}.
Если я использую Ellipsoidвместо этого, то вместо
Graphics3D[Ellipsoid[{0, 0, 0}, {2, 3, 4}]]
я использую
Graphics3D[GraphicsComplex[{{0, 0, 0}}, Ellipsoid[1, {2, 3, 4}]]]
Я получаю сообщение об ошибке:
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}.
и
Coordinate index 0 is out of range for the enclosing GraphicsComplex.
Два вопроса: я GraphicsComplexнеправильно использую ? и есть ли простой способ передать Ellipsoids в a GraphicsComplex?
Ответы
Обратите внимание, что Ellipsoidвизуализируется с использованием 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 }}], Эллипсоид [{1, 1, 1}, {2, 3, 4}]]]
По сути, сфера в начале координат переводится и трансформируется GeometricTransformation3DBoxтак, чтобы она выглядела желаемой Ellipsoid. Теперь обратите внимание, что центр Ellipsoidявляется частью аргумента преобразования. К сожалению, он GraphicsComplexможет обрабатывать индексы координат только тогда, когда они находятся внутри обычного графического примитива, в данном случае внутри SphereBox. Вот почему GraphicsComplexиз Ellipsoidне работает. Рассмотрим соответствующую GraphicsComplexверсию:
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}], Эллипсоид [1, {2, 3, 4}]]]]
Если GraphicsComplex3DBoxбы можно было понять, что 1внутренняя часть GeometricTransformation3DBoxпредставляет собой точку, {1, 1, 1}тогда она отобразилась бы правильно. Однако сложно определить, какие части такого списка соответствуют точке, и поэтому мы GraphicsComplex3DBoxсдаемся.