我开始在模型库中修改Voronoi模型,并尝试使该程序显示Delaunay Triangulation!但是,由于程序尝试访问的索引大于我的列表大小,因此出现错误。
这是我要替换的部分
ca
set numpoints 20; adjust if interface expanded to include more points
let xlist (list 0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20)
let ylist (list 0 y1 y2 y3 y4 y5 y6 y7 y8 y9 y10 y11 y12 y13 y14 y15 y16 y17 y18 y19 y20)
let vallist (list 0 val1 val2 val3 val4 val5 val6 val7 val8 val9 val10 val11 val12 val13 val14 val15 val16 val17 val18 val19 val20)
let onlist (list false point1 point2 point3 point4 point5 point6 point7 point8 point9 point10 point11 point12 point13 point14 point15 point16 point17 point18 point19 point20)
在Voronoi program中,我尝试了以下代码:
set numpoints number
set onlist (list points)
set xlist [xcor] of points
set ylist [ycor] of points
set vallist [value] of points
set onlist fput false onlist
set xlist fput 0 xlist
set ylist fput 0 ylist
set vallist fput 0 vallist
clear-drawing
但这失败了,并带来了灾难性的后果。看 The program failing
我花了3到4个小时来尝试解决此问题。为什么会这样。
答案 0 :(得分:1)
我认为此特定错误源自以下代码:
malloc()
您已经基于存在的当前点创建了列表,这些点的 create-points numpoints + 1 [ if who != 0 [set shape "circle" set size .6 set color red]
setxy item who xlist item who ylist
set value item who vallist
set label who set label-color black
set hidden? not item who onlist
set super? false
face patch 0 0
]
值从零到海龟数。然后,您将创建更多点,这些点的who
值超过who
,xlist
等中的条目数。
例如,假设您清除所有内容并创建3只海龟。它们的vallist
值分别为0、1和2。如果创建这些龟的who
,它将创建一个长度为3个条目的列表。现在,如果您运行xlist
代码,则将开始创建新的乌龟。创建的第一个乌龟的create-points numpoints...
值为3。现在,如果该乌龟尝试访问who
,它将尝试获取索引为3的项目,但仅列出索引值为0、1和2。
修改
item who xlist