Ошибка в функции содержащего () Стены в Anylogic - PullRequest
1 голос
/ 07 июня 2019

все

Я использую 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 голосов
/ 07 июня 2019

Я мог бы воспроизвести поведение с AnyLogic 8.4.

Похоже, что функция contains () не делает различий между закрытыми и незамкнутыми элементами Wall и только проверяет, содержится ли позиция непосредственно в строках, а не в закрытой области, даже если закрыта опция отмечена. Для типа Wall внутренне единственная разница между открытым и закрытым - атрибут WallFillingType установлен в WALL_FILL_HATCHING. Мне интересно, что это не реализовано, так как я знаю, что функция contains() для PolygonalNode (что похоже на Wall) учитывает закрытую область, а не только сами строки.

Напротив, класс RectangularWall имеет функцию contains(), которая учитывает закрытую область, как вы уже отметили в своем вопросе.

Мое единственное предложение - написать собственную функцию contains(), извлекая сегменты (getSegment(index)) и их координаты, создавая экземпляр Java Polygon с теми же координатами и используя уже существующие contains() функция этого Polygon.

...