Tcl アレイは初めてです。私の質問は次のとおりです。
R1 と R2 の 2 つの行を持つ長方形のボックスがあります。これらの各行には、8 つの異なる値があります。これらの 16 個の値 (x 座標と y 座標) を、テキスト ファイルまたは proc からのリスト出力として返したいと考えています。dict を使用しない限り、Tcl proc は配列を出力できないという以前の投稿を読みました。それで、私の質問をよりよく理解できるように絵を描いてみます。
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)
これが私が試したもので、必要な結果が得られています。ただし、これは 2 行にハードコーディングされています。行数を検出し、それに応じて行数を出力できるようにしたいと考えています。
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
あなたの理解のために、特定の行の長方形の内側に 8 つの x、y ポイントがあります。x オフセットは、行の左または右の境界からの最初の x ポイントです。その後、すべてのポイントは、rowIncr と呼ばれる増分値で区切られます。列についても同様です。
期待される出力: これは上記のコードが行うことですが、2 つの行に対してハードコーディングされています。行と列が可変ならロジックを増やして実装したい。
$> 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)
等々 ...