查看此脚本的结果:
canvas .c -bg white
grid .c
set x1 20
set x2 22
set y2 105
for {set f 0} {$f<50} {incr f} {
set y1 [expr {$y2-0.05*$f}]
.c create rectangle $x1 $y1 $x2 $y2 -fill black
incr x1 2
incr x2 2
}
在Windows XP上,我看到图底部边缘左侧比右侧低一个像素。但它不应该发生,因为y2对于所有矩形都是相同的(105)。你觉得怎么样?
答案 0 :(得分:1)
我认为这与传统知识的努力有关 绘制一个至少1个像素的矩形。
在我可以看到的代码中,y2是递增的 1,如果在舍入为短整数后等于y1,则为1。
记录您的创建语句可以看到,像素跳转 发生在f = 10和f = 11之间。这就是重点 y1和y2变得不相等,不会发生调整:
f=10 .c create rectangle 40 104.5 42 105 -fill black
rounded: y1=105 y2=105
adjusted: y1=105 y2=106
f=11 .c create rectangle 42 104.45 44 105 -fill black
rounded: y1=104 y2=105
no adjustment
这解释了像素跳跃。
IMO你应该对此提出错误。