Ellipsoid ใน GraphicsComplex
ฉันพยายามใช้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?
คำตอบ
สังเกตว่า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ยอมแพ้