我编写了一个代码,根据文本文件中的一列值生成一个图形,但是当绘制到图形上时,这些值似乎太小,因为文本文件中的平均数据如下所示:
0.00
4.42
1.10
0.47
0.21
0.51
0.28
0.21
0.01
0.00
如何更改代码,以便在代码绘制图形之前将值增加标准量?
这是我的代码:
package require Tk
set width 300
set height 100
set openFile [open "/fileDirectory/file.txt"]
set records [read $openFile]
set data $records
canvas .c -width $width -height $height
text .t
.t insert end $records
pack .c
pack .t
set count 0
foreach yValue $data {
lappend coords \
[expr {$width * $count/double([llength $data])}] \
[expr {$height - $yValue}]
incr count
}
.c create line $coords
*生成图形的代码引用自here
任何更好地将Y值显示在画布上而不需要更改原始值的替代解决方案也会有帮助。
最佳答案
在设备上显示图片的任务需要几个协调系统和几个转换:
1)首先必须将世界坐标中的图片映射到规格化的设备坐标(视区)。这就是所谓的窗口/视口转换。
公式是:
Xv=[(Xvmax-Xvmin)/(Xwmax-Xwmin)]*(Xw-Xwmin)+Xvmin
=Sx*(Xw-Xwmin)+Xvmin=Sx*Xw+Cx
其中Sx=(Xvmax-Xvmin)/(Xwmax-Xwmin)
Cx=Sx*(-Xwmin)+Xvmin
Y的情况类似
Yv=[(Yvmax-Yvmin)/(Ywmax-Ywmin)]*(Yw-Ywmin)+Yvmin
=Sy*(Yw-Ywmin)+Yvmin=Sy*Yw+Cy
(摘自以下参考文献)
2)第二步是转换到物理设备(屏幕、打印机…)
canvas小部件会处理这个问题。使用画布的缩放方法可以放大或缩小。
答案是,应该首先执行“窗口”视口转换。
--约阿希姆
https://www.siggraph.org/education/materials/HyperGraph/viewing/view2d/pwint.htm