class test_rectangle: def setUp(self): self.rect = Rectangle([0,0],[1,1]) def test_min_inside(self): assert_almost_equal(self.rect.min_distance_point([0.5,0.5]),0) def test_min_one_side(self): assert_almost_equal(self.rect.min_distance_point([0.5,1.5]),0.5) def test_min_two_sides(self): assert_almost_equal(self.rect.min_distance_point([2,2]),np.sqrt(2)) def test_max_inside(self): assert_almost_equal(self.rect.max_distance_point([0.5,0.5]),1/np.sqrt(2)) def test_max_one_side(self): assert_almost_equal(self.rect.max_distance_point([0.5,1.5]),np.hypot(0.5,1.5)) def test_max_two_sides(self): assert_almost_equal(self.rect.max_distance_point([2,2]),2*np.sqrt(2)) def test_split(self): less, greater = self.rect.split(0,0.1) assert_array_equal(less.maxes,[0.1,1]) assert_array_equal(less.mins,[0,0]) assert_array_equal(greater.maxes,[1,1]) assert_array_equal(greater.mins,[0.1,0])
class Test_rectangle: def setup_method(self): self.rect = Rectangle([0, 0], [1, 1]) def test_min_inside(self): assert_almost_equal(self.rect.min_distance_point([0.5, 0.5]), 0) def test_min_one_side(self): assert_almost_equal(self.rect.min_distance_point([0.5, 1.5]), 0.5) def test_min_two_sides(self): assert_almost_equal(self.rect.min_distance_point([2, 2]), np.sqrt(2)) def test_max_inside(self): assert_almost_equal(self.rect.max_distance_point([0.5, 0.5]), 1 / np.sqrt(2)) def test_max_one_side(self): assert_almost_equal(self.rect.max_distance_point([0.5, 1.5]), np.hypot(0.5, 1.5)) def test_max_two_sides(self): assert_almost_equal(self.rect.max_distance_point([2, 2]), 2 * np.sqrt(2)) def test_split(self): less, greater = self.rect.split(0, 0.1) assert_array_equal(less.maxes, [0.1, 1]) assert_array_equal(less.mins, [0, 0]) assert_array_equal(greater.maxes, [1, 1]) assert_array_equal(greater.mins, [0.1, 0])
def det_valid(pts,obsts,movObsts,spd): lastPt = pts[0] MO = [] for o, spdX, spdY in movObsts: obst = Rectangle(maxes=o.maxes, mins=o.mins) MO.append([obst, spdX, spdY]) for pt in pts: for obst in obsts: dist = obst.min_distance_point(pt) if dist <= 0.2: midPT = [(obst.maxes[0]+obst.mins[0])/2, (obst.maxes[1]+obst.mins[1])/2] dist = distance.euclidean(midPT, pt) return -(dist*4)+999 time = distance.euclidean(lastPt, pt)/spd lastPt = pt for obst, spdX, spdY in MO: obst.maxes[0] += spdX*time obst.mins[0] += spdX*time obst.maxes[1] += spdY*time obst.mins[1] += spdY*time dist = obst.min_distance_point(pt) if dist <= 0.5: # print(time.__str__()) midPT = [(obst.maxes[0]+obst.mins[0])/2, (obst.maxes[1]+obst.mins[1])/2] dist = distance.euclidean(midPT, pt) return -(dist*4)+999 return 0