答案1
球体 x^2+y^2+z^2=1 在斜X投影中看起来不是圆形的,该投影映射 (x,y,z) -> (yx/2,zx/2)
为了理解这一点,请注意 (0,0,0) 映射到 (0,0),但 (1,0,0) 映射到 (-1/2,-1/2),(0,1,0) 映射到 (1,0),它们与 (0,0) 的距离不等。
改用正交投影。
答案2
好的,obliqueX 的正常行为不是圆点。如有必要,可以通过相对于 x 球体缩放来获得(几乎)圆点。为了获得独立于图片大小的尺寸,我创建了一个pic1
可以缩放并包含在图片任意点的add(pic1.fit3(),..)
。
请找到以下代码
settings.render=16;
settings.prc = false;
import three;
size(4cm,0);
currentprojection=obliqueX;
dotfactor=10;
draw(unitsquare3);
dot(O);
picture pic1;
size(pic1,1cm);
// to avoid shininess nolight
draw(pic1,xscale3(1/10)*scale3(1/4)*unitsphere,nolight);
add(scale3(10)*pic1.fit3(),(0,0.2,0));
我添加了一个全局变量scale3(1/4)
,以便scale3(10)*pic1.fit3()
给出一个与点因子为 10 的点近似大小的点。
图片
结果xscale3(1/10)
几乎完美,表面是一个扁平的球体。第一次尝试是这样的,xscale3(1/4)
但结果并不完美。当然,如果你要制作一张更复杂的多色图片,球体是扁平的这一事实可能会产生不真实的图片!
另一个解决方案:缩放标签(“\textbullet”),放置一个方向正确的单位盘......