grid.py 1,14 ko
Newer Older
MircoT's avatar
MircoT a validé
# OK, the following are not as widely useful utilities as some of the other
# functions here, but they do show up wherever we have 2D grids: Wumpus and
# Vacuum worlds, TicTacToe and Checkers, and Markov Decision Processes.
MircoT's avatar
MircoT a validé
# __________________________________________________________________________
Tarun Kumar Vangani's avatar
Tarun Kumar Vangani a validé
from utils import clip

orientations = [(1, 0), (0, 1), (-1, 0), (0, -1)]

MircoT's avatar
MircoT a validé

def turn_heading(heading, inc, headings=orientations):
    return headings[(headings.index(heading) + inc) % len(headings)]

MircoT's avatar
MircoT a validé

def turn_right(heading):
    return turn_heading(heading, -1)

MircoT's avatar
MircoT a validé

def turn_left(heading):
    return turn_heading(heading, +1)

MircoT's avatar
MircoT a validé

MircoT's avatar
MircoT a validé
    """The distance between two (x, y) points."""
    return math.hypot((a[0] - b[0]), (a[1] - b[1]))

MircoT's avatar
MircoT a validé

def distance2(a, b):
    "The square of the distance between two (x, y) points."
Tarun Kumar Vangani's avatar
Tarun Kumar Vangani a validé
    return (a[0] - b[0])**2 + (a[1] - b[1])**2


def vector_clip(vector, lowest, highest):
    """Return vector, except if any element is less than the corresponding
    value of lowest or more than the corresponding value of highest, clip to
MircoT's avatar
MircoT a validé
    those values."""
    return type(vector)(map(clip, vector, lowest, highest))