Skip to content

Commit

Permalink
исправить столкновения робота за пределом поля
Browse files Browse the repository at this point in the history
За пределами поля робот действует некорректно, врезаясь в стену только с одной стороны.
Данный коммит это исправляет.
  • Loading branch information
gardspirito committed May 23, 2023
1 parent cba6db6 commit 4a00ac2
Showing 1 changed file with 10 additions and 12 deletions.
22 changes: 10 additions & 12 deletions src/HorizonSideRobots.jl
Original file line number Diff line number Diff line change
Expand Up @@ -91,30 +91,28 @@ function isborder(r::Robot,side::HorizonSideRobots.HorizonSide)::Bool
if side (Nord,Sud)
return false # в этих двух направлениях перепятствий быть не может (т.к. на периметре фрейма не может быть перегородок, отличных от сплошной рамки)
end
return side r.situation.borders_map[1,j] # i=1
i,j = 1,j
elseif 1<=i<=imax && j>jmax # - (i,j) - за пределами фрейма (в восточном секторе)
if side (Ost,West)
return false # в этих двух направлениях перепятствий быть не может (т.к. на периметре фрейма не может быть перегородок, отличных от сплошной рамки)
end
return side r.situation.borders_map[i,jmax] # j=jmax
i,j = i,jmax # j=jmax
elseif i>imax && 1<=j<=jmax # - (i,j) - за пределами фрейма (в южном секторе)
if side (Nord,Sud)
return false # в этих двух направлениях перепятствий быть не может (т.к. на периметре фрейма не может быть перегородок, отличных от сплошной рамки)
end
return side r.situation.borders_map[imax,j] # i=imax
i,j = imax,j # i=imax
elseif 1<=i<=imax && j<1 # - (i,j) - за пределами фрейма (в западном секторе)
if side (Ost,West)
return false # в этих двух направлениях перепятствий быть не может (т.к. на периметре фрейма не может быть перегородок, отличных от сплошной рамки)
end
return side r.situation.borders_map[i,1] # j=1
else # - (i,j) - в пределах фрейма (is_inside(r) == true)
if r.situation.is_framed == true
if side==Nord && i==1 || side==Sud && i==imax || side==West && j==1 || side==Ost && j==jmax
return true # - Робот рядом с внешней рамкой и направление - в сторону рамку
end
end
return is_inner_border(r.situation.robot_position, side, r.situation.borders_map)[1] # side ∈ r.situation.borders_map[i,j]
end
i,j = i,1 # j=1
elseif r.situation.is_framed == true
if side==Nord && i==1 || side==Sud && i==imax || side==West && j==1 || side==Ost && j==jmax
return true # - Робот рядом с внешней рамкой и направление - в сторону рамку
end
end
return is_inner_border((i,j), side, r.situation.borders_map)[1] # side ∈ r.situation.borders_map[i,j]
end # function isborder

"""
Expand Down

0 comments on commit 4a00ac2

Please sign in to comment.