Anylogic中Wall的contains()函数中的错误

时间:2019-06-07 10:23:49

标签: anylogic

全部

我正在使用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);    

1 个答案:

答案 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}}功能。