全部
我正在使用Anylogic 8进行一些模拟,但似乎在那里发现了一个错误。您能帮我验证一下还是解决它?
在判断点是否包含在墙的形状中时,我们可以使用contains()
提供的Wall
函数。当您的墙是Rectangular Wall
时,该函数可以正确返回布尔值。
但是,当您仅创建一堵墙并在其属性中将其设为Closed
时,contains()
无法返回正确的值。
您可以简单地绘制一个矩形墙和一个法线墙(但应该是封闭的),然后选择一个点(x,y)
来测试此功能。
// my code to test the contains() function
boolean flag=main.wall1.contains(155,5);
int flagInt = flag ? 1 : 0;
System.out.println(flagInt);
答案 0 :(得分:0)
我可以使用AnyLogic 8.4重现此行为。
似乎contains()函数没有区分闭合Wall
和未闭合Wall
元素,并且仅检查位置是否直接包含在行上,而不是包含在封闭区域中,即使 closed 选项已选中。对于内部类型WallFillingType
,打开和关闭之间的唯一区别是属性WALL_FILL_HATCHING
设置为contains()
。我想知道这没有实现,因为我知道PolygonalNode
的{{1}}函数(似乎类似于Wall
)正在考虑封闭区域,而不仅仅是行本身。
相反,类RectangularWall
具有contains()
函数,该函数考虑了封闭区域,正如您在问题中已经提到的那样。
我唯一的建议是编写自己的contains()
函数,方法是检索段(getSegment(index)
)及其坐标,创建具有相同坐标的Java Polygon实例,并使用已经存在的实例contains()
的{{1}}功能。