我试图对上皮空间的内部进行建模,并陷入围绕圆柱空间内部边缘的运动。基本上,我试图实现StickyBorders并将代理保留在我创建的圆柱空间中的这些边界上。
在Repast Simphony中是否可以使用圆柱坐标?我在这个例子(https://www.researchgate.net/publication/259695792_An_Agent-Based_Model_of_Vascular_Disease_Remodeling_in_Pulmonary_Arterial_Hypertension)上发现了他们似乎做过类似的事情,但是本文并没有对方法做更深入的介绍,而且我也不认为这是repast simphony模型中的例子。>
目前,我有一类上皮细胞,它们被设置为形成圆柱体,而其他药物则刚好在那个圆柱体内部开始。为了移动,他们正在选择他们最想要的位置(类似于僵尸代码),然后在该原始位置的一个网格正方形内沿该所需位置的方向指向一个新位置。他们在移至新点之前检查该新点,并确保在紧邻的摩尔区附近至少还有两个其他上皮细胞,以确保它们紧贴墙壁。
GridPoint intendedpt = new GridPoint((int)Math.rint(alongX),(int)Math.rint(alongY),(int)Math.rint(alongZ));
GridCellNgh<EpithelialCell> nearEpithelium = new GridCellNgh<EpithelialCell>(mac_grid, intendedpt, EpithelialCell.class, 1,1,1);
List<GridCell<EpithelialCell>> EpiCells = nearEpithelium.getNeighborhood(false);
int nearbyEpiCellsCount=0;
for (GridCell<EpithelialCell> cell: EpiCells) {
nearbyEpiCellsCount++;
}
if (nearbyEpiCellsCount<2) {
System.out.println(this + " leaving epithelial wall /r");
RunEnvironment.getInstance().pauseRun();
//TODO: where to go if false
}
我想知道是否有一种方法可以将空间的边界设置为圆柱体,或者检查代理的哪一侧靠墙,并限制其在该方向上的移动。
答案 0 :(得分:3)
粘性边界代码(StickyBorders.java)实际上只是检查代理移动到的点是否超出空间的任何尺寸,如果是,则将该点限制在该尺寸上。因此,例如,如果该空间为3x4,并且座席的移动会将其带到4,2,则该点变为3,2,然后将座席放置在此处。在这种情况下,您可以做类似的事情吗?如果没有,您能否编辑您的问题以解释为什么不这样做,也许这将有助于我们更好地理解。
答案 1 :(得分:2)
我们在该模型中采用的方法是使用具有自定义边框和查询方法的3D网格空间。该空间本身仍然是笛卡尔式的-我们只是使用自定义显示代码将其可视化为圆柱体。对于该应用,使用笛卡尔网格是一个合理的近似值,因为像元尺寸明显小于血管半径,因此忽略了曲率影响。容器空间上的边界条件在角度尺寸上是环绕的,因此细胞可以围绕容器的圆周连续移动,并且轴向边界条件也被包裹,因为我们假设足够长的容器长度是合理的。壁厚尺寸在基底膜(y = 0)和流体界面(y =壁厚)处具有硬边界。
根据要使用的空间类型,您将需要实现执行边框功能的PointTranslator或GridPointTranslator。如果您需要特定的代码示例,建议您直接与作者联系。