2014-02-22 3 views
4

저는 정말 간단하게하려고하지만, 어떤 이유로 그저 작동시키지 못합니다.NetLogo 거북이 벽을 치지 못하도록 막으십시오.

내 설정 기능은 (-20, 20)에서 (20, 20)까지의 사각형 벽을 만들고 벽 안쪽에 크기가 3 인 원형 거북이를 생성합니다. 사각형 벽은 단순히 푸른 색의 패치로 만들어집니다.

이제 나는 거북이에게 -90도에서 90도까지 어디서나 회전하도록 지시하고, 0.5 단계만큼 앞으로 이동시키는 go 함수가 있습니다. 벽 안으로 들어가는 것은 허용되지 않습니다. 벽에 부딪 칠 때 다른 방향으로 들어가기 만하면됩니다. 거북이 실제로 벽 안으로 들어갈 때까지는 벽을 감지 할 수 없습니다.

다음과 같이 내가 사용하고있는 코드는 다음과 같습니다 나는 위의 코드가 작동하지 않습니다 말할 슬프다

ask turtle 0 [ 
    let invalid true 
    let turn-degree (random(180) - 90) 
    rt turn-degree 

    let next-patch patch-ahead 1 ;; Declare next-patch before moving 

    while [invalid] [ ;; While invalid condition 
    ask next-patch [ 
     ;; Neighbors of the next patch are counted, because turtle is size 3 
     if (count neighbors with [pcolor = blue] = 0) [ 
     set invalid false 
     ] 
    ] 

    if (invalid) [ 
     lt turn-degree ;; Turn the turtle back to the original direction 
     set turn-degree (random(180) - 90) ;; Randomize turn degree again 
     set next-patch patch-ahead 1 ;; Declare next-patch before moving again 
    ] 
    ] 

    ;; Finally, jump 0.5 steps ahead in the chosen direction 
    jump 0.5 
] 

을, 거북이는 여전히 어떻게 든 파란색 벽 자체를 겹쳐 관리하기 때문에 , 그것은 일어나서는 안된다. 나는 그것이 두 가지 이유 때문이라고 생각합니다 :

1) 0.5 단계가 "패치 전진 (patch-ahead)"조건을 망치고 있습니다. 그러나 나는 patch-ahead 0.5로 아무런 효과를 시도하지 않았다. 2) 무작위 회전 각도로 파란색 벽이 거북이에서 0.5 이상 떨어져 있지만,이 문제에 대한 해결 방법이 없습니다 ...

어떤 제안이 있으십니까?

+0

구현하려는 모델은 무엇입니까? 나는 이와 비슷한 것을 시도하고 있지만, 힘을 가진 연속 모델을 사용한다. –

답변

2

거북이가 벽에 닿는 패치에 닿는 패치 가장자리 근처로 이동할 때 거북이 패치의 neighbors은 벽의 일부가 아니지만 여전히 거북이입니다. 벽에서 1.5 피트 미만 떨어져 있어야합니다. 내가 정확히 브라이언의 방법을 시도하지 않았다

ask turtle 0 [ 
    rt (random 180) - 90 

    fd .5 
    while [ any? patches in-radius 2 with [ pcolor = blue ] ] [ 
    bk .5 
    rt (random 180) - 90 
    fd .5 
    ] 
] 
1

,하지만 난 그냥뿐만 아니라 날 위해 일했던이보십시오. 나는 다음을 사용하여 끝냈다 :

if (any? patches in-cone 3 60 with [pcolor = blue]) 

을 나의 벽 감지 조건으로 사용했다. 그것은 충분히 잘 작동했습니다. :)

관련 문제