Ellipsoid ใน GraphicsComplex

Sep 23 2020

ฉันพยายามใช้Ellipsoidใน a 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ไม่ถูกต้องหรือไม่? และมีวิธีแก้ปัญหาง่ายๆในการป้อนข้อมูลEllipsoidไปยัง a GraphicsComplex?

คำตอบ

2 CarlWoll Sep 22 2020 at 23:59

สังเกตว่า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ยอมแพ้