如何在列表中附加重新安排的过程的输出

时间:2017-07-13 19:31:59

标签: tcl procedure ns2

在下面的代码中proc processDistance给出proc Inverse2使用的排序列表。Proc Inverse2给出包含{x,y,当前时间}的列表。这是在每1s后执行的。问题是当我在puts $results内写proc Inverse2时,在终端中我只能在当前时间看到$ result。虽然我在检查$ result的长度时使用了lappend但它显示了长度列表是1.我想访问以前生成的值。怎么做。

代码:

proc distance {n1 n2 nd1 nd2} {
    global ns
    set now [$ns now]
    set x1 [expr int([$n1 set X_])]
    set y1 [expr int([$n1 set Y_])]
    set x2 [expr int([$n2 set X_])]
    set y2 [expr int([$n2 set Y_])]

    set d [expr hypot($x2-$x1,$y2-$y1)]

    return [list $nd1 $nd2 $x1 $y1 $x2 $y2 $d $now]
}


proc processDistances {count threshold {filter ""}} {
    global node_
    global ns
    set now [$ns now]
    set t 1.0

    set distances {}
    for {set i 1} {$i < $count} {incr i} {
        for {set j 1} {$j < $count} {incr j} {
            # Skip self comparisons
            if {$i == $j} continue

            # Apply target filter
            if {$filter ne "" && $j != $filter} continue

            # Get the distance information
            set thisDistance [distance $node_($i) $node_($j) $i $j]

            # Check that the nodes are close enough
            if {[lindex $thisDistance 6] < $threshold} {
                lappend distances $thisDistance
            }
        }
    }

    # Sort the pairs, by distances

    set distances [lsort -real -increasing -index 6 $distances]

    puts $distances

    $ns at [expr $now+$t] [list processDistances $count $threshold $filter]
    Inverse2 $distances
}
$ns at 8.0 [list processDistances $val(nn) 200 41]

proc Inverse2 {m} {
    set result {}

    lassign [lindex $m 0 2] x1 
    lassign [lindex $m 0 3] y1 
    lassign [lindex $m 0 6] d1
    lassign [lindex $m 1 2] x2  
    lassign [lindex $m 1 3] y2  
    lassign [lindex $m 1 6] d2  
    lassign [lindex $m 2 2] x3
    lassign [lindex $m 2 3] y3  
    lassign [lindex $m 2 6] d3   

    set mt {{? ?} {? ?}}
    lset mt 0 0 [expr 2*($x1-$x2)]
    lset mt 0 1 [expr 2*($y1-$y2)]
    lset mt 1 0 [expr 2*($x1-$x3)]
    lset mt 1 1 [expr 2*($y1-$y3)]
    set const {{?} {?}}
    lset const 0 [expr {(pow($x1,2)+pow($y1,2)-pow($d1,2))-(pow($x2,2)+pow($y2,2)-pow($d2,2))}]
    lset const 1 [expr {(pow($x1,2)+pow($y1,2)-pow($d1,2))-(pow($x3,2)+pow($y3,2)-pow($d3,2))}]

    set x [expr {double([lindex [Inverse3 $mt] 0 0]  * [lindex $const 0]
                       + [lindex [Inverse3 $mt] 0 1] * [lindex $const 1])}]
    set y [expr {double([lindex [Inverse3 $mt] 1 0]  * [lindex $const 0]
                       + [lindex [Inverse3 $mt] 1 1] * [lindex $const 1])}]

    lappend result "$x $y $now"
    puts $result
}

0 个答案:

没有答案