Какой примитив следует использовать при сравнении координат в netlo go? - PullRequest
2 голосов
/ 28 апреля 2020

Я все еще изучаю Netlo go и не знаю, как go сравнивать координаты из заголовка с фиксированным набором координат в наборе данных. Примитив «один из» не является подходящим инструментом для работы и не является «членом?», Поскольку я не получаю ожидаемого результата.

   let wallcoor []
   set wallcoor [ [-17 11] [-16 11] [-15 -11] [-14 11] [-13 11] [-12 11] [-11 11] [-10 11] [-9 11] [-8 
                  11] [ 0 11 ] [ 1 11 ] [ 2 11 ] [ 3 11 ] [ 4 11 ] [ 5 11 ] [ 6 11 ] [ 7 11 ] [ 8 11 ] 
                  [12 11] [13 11 ] [14 11] [15 11] [16 11] [17 11] ]  
   let heading-equ calculate-line (xcor) (ycor) (heading-to-angle heading)
   ifelse ( heading-equ = one-of wallcoor )
        [ bk 0.5 lt random 30 rt random 30 fd 1 ]
        [ rt random 30 lt random 30 fd 1]

Заранее спасибо за ваше время

1 Ответ

3 голосов
/ 28 апреля 2020

Простой ответ - member?. Если вы хотите узнать, существует ли данный элемент в списке, member? item wallcoor вернет истину, если элемент в wallcoor, и ложь, если это не так.

Но я боюсь, что вы сравниваете здесь яблоки и апельсины. Из вашего кода видно, что heading-equ дает вам уравнение линии, описывающей путь черепахи в данном месте с заданным заголовком, но вы сравниваете это со списком точек, описывающих стену. Я бы подумал, что вместо этого вы посмотрите, где уравнение для пути пересекается с уравнением для стены, чтобы увидеть, где черепаха ударит о стену. Более того, что если черепаха упадет в стену между -17 11 и -16, 11? Расположение черепахи не всегда в центре участка. Конечно, я, возможно, полностью неверно истолковал, что такое heading-equ.

Вопрос, похожий на этот, задается в Как реализовать предотвращение препятствий в Netlo go, используя концепцию двух пересекающихся линий (заголовок черепахи против стена из заплат) . Вы можете это проверить.

Просто для того, чтобы подробно остановиться на подходе пересекающейся линии, ваша стена имеет уравнение y = 11 Если у вас есть уравнение для пути черепахи, то вы можете выяснить, где эти две линии пересекаются, решая их одновременно. Затем вы можете посмотреть, находится ли эта точка пересечения между (скажем) x > -9.5 and x < -0.5, чтобы увидеть, находится ли пересечение в этом дверном проеме. (Я поставил дверь между краями пятен -10 11 и 0 11.) Вам также необходимо проверить, находится ли пересечение за пределами мира (x < -17.5 or x > 17.5). Если это так, черепаха поразит край света, прежде чем ударит о стену.

Существует еще один общий подход к этому, заключающийся в том, что черепаха смотрит вперед на препятствие. В Библиотеке моделей вы найдете два хороших примера в разделе «Примеры кода»: «Пример заглядывания вперед» и «Пример следования стенам».

Надеюсь, это поможет, Чарльз

...