Use offset instead of extending the line

This commit is contained in:
kngwyu
2020-07-15 00:59:54 +09:00
parent 8907d0a2c0
commit b6ef0fa028
7 changed files with 84 additions and 93 deletions
-27
View File
@@ -1,5 +1,4 @@
import gym
import numpy as np
import pytest
import mujoco_maze
@@ -21,29 +20,3 @@ def test_point_maze(maze_id):
assert env.reset().shape == (7,)
s, _, _, _ = env.step(env.action_space.sample())
assert s.shape == (7,)
@pytest.mark.parametrize("maze_id", mujoco_maze.TaskRegistry.keys())
def test_collision_lines(maze_id):
env = gym.make(f"Point{maze_id}-v0")
if maze_id == "UMaze":
assert len(env.unwrapped._collision.lines) == 16
structure = env.unwrapped._maze_structure
scaling = env.unwrapped._maze_size_scaling
init_x = env.unwrapped._init_torso_x
init_y = env.unwrapped._init_torso_y
def check_pos(pos):
x_orig = (pos.real + init_x) / scaling
y_orig = (pos.imag + init_y) / scaling
return structure[int(round(y_orig))][int(round(x_orig))]
for line in env.unwrapped._collision.lines:
mid = (line.p1 + line.p2) / 2
p2p1 = line.p2 - line.p1
cell1 = check_pos(mid + 0.1 * p2p1 * np.complex(0.0, -1.0))
cell2 = check_pos(mid + 0.1 * p2p1 * np.complex(0.0, 1.0))
if cell1.is_block():
assert not cell2.is_block()
else:
assert cell2.is_block()
+14
View File
@@ -4,6 +4,19 @@ import pytest
from mujoco_maze.maze_env_utils import Line
@pytest.mark.parametrize(
"l1, l2, p, ans",
[
((0.0, 0.0), (4.0, 4.0), (1.0, 3.0), 2.0 ** 0.5),
((-3.0, -3.0), (0.0, 1.0), (-3.0, 1.0), 2.4),
],
)
def test_distance(l1, l2, p, ans):
line = Line(l1, l2)
point = np.complex(*p)
assert abs(line.distance(point) - ans) <= 1e-8
@pytest.mark.parametrize(
"l1p1, l1p2, l2p1, l2p2, none",
[
@@ -22,6 +35,7 @@ def test_intersect(l1p1, l1p2, l2p1, l2p2, none):
assert i1 is None and i2 is None
else:
assert i1 is not None
i1 = np.array([i1.real, i1.imag])
np.testing.assert_array_almost_equal(i1, np.array(i2))