我试图用下面的 POVRay 代码重现你风景的尺寸。在这里,我展示了 10 厘米 (0.0001) 宽的表面元素,其高度变化为 z=(i+j)*0.000001(即每步 1 毫米)。我希望 2D 楼梯随着距离原点(0.0,0.0,1750.0)的距离逐渐上升。
/*
display a planet's surface with real dimensions
*/
#include "colors.inc"
// dimensions
#declare Radius = 1750.0; // planet radius in km
#declare nEl = 100; // nEl x nEl will be produced
#declare sEl = 0.0001; // size of one surface element
//
#declare camX = 0.0;
#declare camY = 0.0;
#declare camZ = Radius + 0.003
camera {
location <camX,camY,camZ>
look_at <camX+1,camY+1,camZ-1>
angle 50
sky <0,1,0>
up <0,9,0>
right <16,0,0> // up,right -> 16:9
}
light_source { <camX,camY,camZ>
color White
fade_distance 2.0
fade_power 1
}
#macro SElement(Xoff,Yoff,Zoff)
#local cbase=<0.9,0.1,0.1>; // base color
#local hcolr=rand(hh)*0.1; // color variation
#local hcolg=rand(hh)*0.1;
#local hcolb=rand(hh)*0.1;
#local OneElement = box { <0,0,0>, <1,1,1>
texture {
pigment { color cbase+<hcolr,hcolg,hcolb> }
}
}
object{ OneElement
scale sEl
translate <Xoff,Yoff,Zoff> }
#end // macro SElement
// create surface from surface elements of varying elevation Zoff
#local i=0;
#local j=0;
#while (i<nEl)
#while (j<nEl)
#local Xoff = i*(sEl);
#local Yoff = j*(sEl);
#local Zoff = Radius + (i+j)*0.000001;
SElement(Xoff,Yoff,Zoff)
#local j=j+1;
#end
#local j=0;
#local i=i+1;
#end
令我惊讶的是,这发生了:
在固定的时间间隔内,模式中有很大的步骤无法用场景描述的简单数学来解释。当我更改为 Radius=1.0; 文物消失了:
所以结论(以及您的问题的答案,而不是一般问题的答案)必须是:是的,POVRay 在添加大小数字时存在一些问题。也许有一个开关告诉 POVRay 使用双精度。我不知道。我猜,有些经验丰富的 POVRay 用户在阅读本文时只会微笑。
我希望这有帮助。无论如何,通过回答您的问题,我也学到了一些东西。
干杯,马库斯