使用gotoPopulation切换代理所属种群时如何保持位置不变
问题原因
你调用无参的gotoPopulation()方法时出现位置跳变,是因为代理的坐标默认是相对于所属父代理的相对值:迁移前集装箱的坐标是相对于ship代理的局部坐标,无参迁移时没有做参考系转换,会被默认赋值为目标种群所在main环境的初始坐标(0,0)。
可行解决方案
方案1:使用带位置参数的gotoPopulation重载方法(推荐)
AnyLogic的gotoPopulation支持传入目标坐标参数,你可以先计算出集装箱在main环境下的绝对坐标,切换种群时直接传入即可保持位置不变:
// 读取集装箱当前在main环境下的绝对坐标 double mainX = getX(main); double mainY = getY(main); // 切换种群的同时指定位置 gotoPopulation(main.containers_main, mainX, mainY);
方案2:先存坐标再手动赋值(兼容老版本AnyLogic)
如果你使用的旧版本不支持带参数的gotoPopulation,可以先缓存全局坐标,切换种群后手动赋值:
double mainX = getX(main); double mainY = getY(main); // 先执行种群切换 gotoPopulation(main.containers_main); // 手动设置切换后的坐标 setXY(mainX, mainY);
补充说明
如果需要保留集装箱的z轴高度、旋转角度等属性,同理提前调用getZ(main)、getRotation()获取对应值,切换种群后手动赋值即可。
内容的提问来源于stack exchange,提问作者bluechimp
相关产品推荐
相关产品推荐

