首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NS2-tcl -将字段划分为正方形?

NS2-tcl -将字段划分为正方形?
EN

Stack Overflow用户
提问于 2015-04-24 07:09:52
回答 1查看 532关注 0票数 0

我正在使用ns2.35-ubuntu10.04。我想使用TCL脚本将传感器区域划分为9个大小相等的正方形。这是我第一次尝试,但没有结果。(除法步骤由星号和attachment picture分隔。)

代码语言:javascript
复制
# Define options
set val(chan)    Channel/WirelessChannel     ;  # channel type   
set val(prop)    Propagation/TwoRayGround    ;  # radio-propagation model  
set val(netif)   Phy/WirelessPhy             ;  # network interface type  
set val(mac)     Mac/802_11                  ;  # MAC type   
set val(ifq)     Queue/DropTail/PriQueue     ;  # interface queue type  
set val(ll)      LL                          ;  # link layer type  
set val(ant)     Antenna/OmniAntenna         ; # antenna model  
set val(ifqlen)  50                          ;  # max packet in ifq  
set val(rp)      AODV                       ;  # routing protocol  
set val(x)       900                         ;  # X dimension of topography  
set val(y)       900                         ;  # Y dimension of topography   
set val(stop)    10                          ;  # time of simulation end  
set val(Y)        0;  
set val(X)        0;   
set val(nn)      30 ;  


#Creating simulation:  
set ns [new Simulator]  

#Creating nam and trace file:  
set tracefd [open k.tr w]  
set namtrace [open k.nam w]     
$ns trace-all $tracefd  
$ns namtrace-all-wireless $namtrace $val(x) $val(y)  

# set up topography object   
set topo [new Topography]    
$topo load_flatgrid $val(x) $val(y)    
set god_ [create-god $val(nn)]   

# configure the nodes 
$ns node-config -adhocRouting $val(rp) \  
                -llType $val(ll) \  
                -macType $val(mac) \  
                -ifqType $val(ifq) \  
                -ifqLen $val(ifqlen) \  
                -antType $val(ant) \  
                -propType $val(prop) \  
                -phyType $val(netif) \  
                -channelType $val(chan) \  
                -topoInstance $topo \  
                -agentTrace ON \  
                -routerTrace ON \  
                -macTrace OFF \  

############ BEGIN ############
set $val(X)  [expr $val(x)/300]  
set $val(Y)  [expr $val(y)/300]  
for {set i 0} {$i<=$val(X)} {incr i}   
{  
for {set j 0} {$j<=$val(Y)}  {incr i}  
{  
for {set b 0} {$b < $val(nn) } { incr b }   
 {
     set node($b) [$ns node]
}  
}  
}
############ END ############

#stop procedure..   

proc stop {}   {
    global ns tracefd namtrace  
    $ns flush-trace  
    close $tracefd  
    close $namtrace  
    exec nam k.nam &  
 }

$ns at $val(stop) "stop"  

$ns run  
EN

回答 1

Stack Overflow用户

发布于 2015-04-24 16:02:03

仅查看您突出显示的代码:

代码语言:javascript
复制
set $val(X)  [expr $val(x)/300]  
set $val(Y)  [expr $val(y)/300]  
for {set i 0} {$i<=$val(X)} {incr i}   
{  
for {set j 0} {$j<=$val(Y)}  {incr i}  
{  
for {set b 0} {$b < $val(nn) } { incr b }   
 {
     set node($b) [$ns node]
}  
}  
}

主要的问题是你在它们自己的行上放了左大括号。不要在Tcl中这样做;该语言非常喜欢One True花括号样式(因为换行符很重要,是命令的终止符)。如果我们改成这样(缩进只是为了清楚起见):

代码语言:javascript
复制
set $val(X) [expr $val(x)/300]
set $val(Y) [expr $val(y)/300]
for {set i 0} {$i<=$val(X)} {incr i} {
    for {set j 0} {$j<=$val(Y)} {incr i} {
        for {set b 0} {$b < $val(nn)} {incr b} {
            set node($b) [$ns node]
        }
    }
}

然后代码就会运行。但是,它可能不会产生您所期望的结果,因为在最里面的循环中既没有使用i,也没有使用j值。当你创建一个节点时,你需要以某种方式告诉它它在网格中的位置。

此外,您正在使用三个嵌套循环,因此您(可能)正在创建一个3D网格。这是你想要的吗?(因为您也只是将有关一个维度的信息保存在键中,这可能意味着您只使用了该网格的一小部分,而完全失去了对其他未区分节点的跟踪。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29835934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档