Ellipsoid di GraphicsComplex

Sep 23 2020

Saya mencoba menggunakan Ellipsoiddi GraphicsComplexdan saya terjebak. Pemahaman saya GraphicsComplexadalah bahwa tugas koordinat titik eksplisit diganti dengan nilai integer yang menunjuk ke daftar koordinat sebagai gantinya.

Jadi, bukan

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

Saya bisa menggunakan

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

sebagai gantinya. Perhatikan, argumen pertama Spherediganti dengan poin pertama dari daftar, yaitu {0,0,0} sedangkan argumen kedua diidentifikasikan dengan benar sebagai radius (bukan koordinat) dan tidak diganti dengan {0,0,0}.

Jika saya gunakan Ellipsoidsebagai gantinya, jadi bukan

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

saya menggunakan

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

Saya mendapatkan kesalahan:

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

dan

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

Dua pertanyaan: apakah saya menggunakan secara GraphicsComplextidak benar? dan apakah ada solusi sederhana Ellipsoiduntuk memasukkan s ke GraphicsComplex?

Jawaban

2 CarlWoll Sep 22 2020 at 23:59

Catatan yang Ellipsoiddiberikan dengan menggunakan GeometricTransformationunder the hood:

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

Pada dasarnya, sebuah bola di asalnya diterjemahkan dan diubah oleh GeometricTransformation3DBoxsehingga terlihat seperti yang diinginkan Ellipsoid. Sekarang, perhatikan bahwa pusat dari Ellipsoidadalah bagian dari argumen transformasi. Sayangnya, GraphicsComplexhanya dapat menangani indeks koordinat saat berada di dalam grafik primitif normal, dalam hal ini di dalam SphereBox. Inilah sebabnya mengapa GraphicsComplexdari Ellipsoidtidak bekerja. Pertimbangkan GraphicsComplexversi yang sesuai :

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

Jika GraphicsComplex3DBoxdapat memahami bahwa bagian 1dalam GeometricTransformation3DBoxmewakili titik {1, 1, 1}maka itu akan ditampilkan dengan benar. Namun, sulit untuk mengetahui bagian mana dari daftar tersebut yang sesuai dengan suatu poin, dan kemudian GraphicsComplex3DBoxmenyerah.