问题:
一根长度为L厘米的木棍上有n只蚂蚁,每只蚂蚁要么朝左爬,要么朝右爬,速度为1厘米/秒。当两只蚂蚁相撞时,二者同时掉头(掉头时间忽略不计)。给出每只蚂蚁的初始位置和朝向,计算T秒之后每只蚂蚁的位置。
仿真过程:记录程序设计时候考虑到一些问题
1:数学推导还是程序仿真?
2:角色定位
蚂蚁是个体元素,受规则约束,结果的执行者。木棍扮演上帝的角色,设置情景(木棍的长度,运行时间),应该设计两个类,上帝接受输入,控制蚂蚁运行,给出输出。
3:难点在哪里?
蚂蚁位置,方向的一致性:统称为状态。
蚂蚁应不应该有眼睛,有智慧?
上帝与蚂蚁:社会主义经济&市场经济&中国特色的社会主义经济? 先让市场走,允许错,错了之后政府再纠正。
市场:除非在木棍的两端,否则蚂蚁不会主动掉头。
定义错的含义:应该掉头但是没有掉头,需要上帝插手。
纠正:纠正的是状态。
具体情况:
0:distance(ant_1,ant_2)=2,facetoface(ant_1,ant_2) = true
1:distance(ant_1,ant_2)=1,facetoface(ant_1,ant_2) = true
按照市场规则走,两者轨迹没有重叠,没有碰头
按照市场走,两者轨迹没有重叠,但是碰头
按照市场走,轨迹重叠,后又有碰头
程序设计:
状态类:class state{}; 接受输入;
蚂蚁类:自身状态与简单的市场规则;(状态类可以进行派生,给出蚂蚁类?不好!)
上帝类:控制情景设置,控制蚂蚁的仿真时间,宏观调控没守规矩的蚂蚁,结果的图像化显示(没有解决方向问题)。
蚂蚁先走=>上帝检查,轨迹重叠?处理轨迹=>有没有碰头?处理碰头=>蚂蚁继续走下一步。
注意:同一段只能有两个蚂蚁轨迹重叠,同一点只能有两个蚂蚁碰头,建立轨迹索引表与点索引表:记录在该段有轨迹重叠的两只蚂蚁的编号,记录在该点有碰头现象的两只蚂蚁的编号,统统返回给上帝去处理。
COEDS: