我是 Tcl 数组的新手。我的问题如下。
我有一个带有两行 R1 和 R2 的矩形框。这些行中的每一行都有 8 个不同的值。我想在文本文件中或作为 proc 的列表输出返回这 16 个值(x 和 y 坐标)。我阅读了一些关于 Tcl proc 除非我们使用 dict 否则无法输出数组的早期帖子。所以,我会试着画一张图,这样你就可以更好地理解我的问题。
R1 x1y1 x2y2 ... x8,y8 R2 x9,y9 ... x16,y16
例如,当我在命令提示符下或在具有虚拟值的文件中运行 proc 时的预期输出
$> (1,2) (2,3) (3,4) .... (7,8) (9,10) (10,11) ......... (15,16)
所以这就是我尝试过的,我得到了我需要的结果。但这是硬编码的两行。我想让它能够检测有多少行,然后相应地输出行数。
proc getPointList {rect_boundary rowOffset colOffset rowIncr colIncr } {
set cordlist $rect_boundary
set xl [lindex $cordlist 0]
set yl [lindex $cordlist 1]
set xh [lindex $cordlist 2]
set yh [lindex $cordlist 3]
set list "" ;
for {set y [expr {$yh - $colOffset}]} {$y >= [expr {$yl + $colOffset}]} { incr y $colIncr } {
for {set x [expr {$xl + $rowOffset}]} {$x <= [expr {$xh - $rowOffset}]} { incr x $rowIncr } {
set list "$list $x $y" ;
puts "Value of x is: $x"; puts "\t Value of y is: $y" ;
}
}
return $list
}
set rect_boundary {10 15 100 40} # xl yl xh yh
set rowOffset 5
set colOffset 5
set rowIncr 10
set colIncr 15
我需要在此代码中基于 yh-yl 和 xh-xl 实现一些逻辑,以计算矩形的高度和宽度并相应地输出行
调用proc的命令
$> getPointList $rect_boundary $rowOffset $colOffset $rowIncr $colIncr
只是为了您的理解,在特定行的矩形内有八个 x,y 点。x 偏移量是从左边界或右边界开始的一行上的第一个 x 点,此后所有点都由我称为 rowIncr 的增量值分隔。列也是如此。
预期输出:这是上面的代码所做的,但它被硬编码为两行。如果行和列是可变的,我想增加和实现逻辑。
$> R1: (15 40) (25 40) (35 40) (45 40) (55 40) (65 40) (75 40) (85 40) (95 40)
R2: (15 15) (25 15) (35 15) (45 15) (55 15) (65 15) (75 15) (85 15) (95 15)
矩形图像以获得更好的清晰度,因为这件事不会让我更新图片
__________________________________________________________________________ (100,40)
| |- 5 |
| . . . . . . . . |
| |- 15 |
|-5-. . --10---. . . . . . |
| |
|_________________________________________________________________________|
(10,15)
对于杰瑞:
Case1 rowIncr 10 colIncr 20
__________________________________________________________________________ (80,40)
| |- 5 |
| . . . . . . . . |
| |- 20 |
|-5-. . --10---. . . . . . |
| |
|_________________________________________________________________________|
(10,10)
Case2 rowIncr 20 colIncr 35
_________________________________________________ (100,70)
| |- 5 |
| . . . . . |
| |- 35 |
|-5-. . --20---. . . |
| | |-5 |
|________________________________________________|
(10,25)
等等 ...