def test_estimate_curve_length_horizontal(self): for t in [0.2, 0.4, 0.6, 0.8]: curve = BezierCurve(start_point=np.array([0, 0]), control_point=t * np.array([100, 0]), end_point=np.array([100, 0])) self.assertAlmostEqual(curve.estimate_curve_length(), 100, 3)
def test_get_parametrized_point_random_points(self): curve = BezierCurve(start_point=np.array([0, 0]), control_point=np.array([50, 50]), end_point=np.array([100, 100])) for t in [0.2, 0.4, 0.6, 0.8]: self._compare_points(curve.get_parametrized_point(t), np.array([100 * t, 100 * t]))
def test_find_parameter_t_diagonal(self): curve = BezierCurve(start_point=np.array([0, 0]), control_point=np.array([50, 50]), end_point=np.array([100, 100])) for t in [0.2, 0.4, 0.6, 0.8]: self.assertAlmostEqual( curve.find_parameter_t(t * np.sqrt(2) * 100), t, 3)
def test_estimate_curve_length_not_mid_points(self): for t1 in [0.2, 0.4]: for t2 in [0.6, 0.8]: curve = BezierCurve(start_point=np.array([0, 0]), control_point=np.array([50, 50]), end_point=np.array([100, 100])) self.assertAlmostEqual( curve.estimate_curve_length(start_t=t1, end_t=t2), (t2 - t1) * 100 * np.sqrt(2), 3)
def test_split_curve_equally_horizontal_line(self): for t in [0.2, 0.4, 0.6, 0.8]: curve = BezierCurve(start_point=np.array([0, 0]), control_point=t * np.array([0, 101]), end_point=np.array([0, 101])) ans = np.array([[0, i] for i in range(101, 5)]) res = curve.split_curve_equally(5) for idx in range(len(ans)): self._compare_points(ans[idx], res[idx])
def test_get_parametrized_point_control_point(self): start = np.array([10, 10]) end = np.array([80, 20]) control = (start + end) / 2 curve = BezierCurve(start_point=start, control_point=control, end_point=end) self._compare_points(curve.control_point, curve.get_parametrized_point(0.5))
def test_find_parameter_t_integration(self): curve = BezierCurve(start_point=np.array([10, 30]), end_point=np.array([40, 60]), control_point=np.array([100, 20])) for t in [0.2, 0.4, 0.6, 0.8]: start_t = 0.1 end_t = 0.1 + t self.assertAlmostEqual(curve.find_parameter_t( curve.estimate_curve_length(start_t=start_t, end_t=end_t), start_t=start_t), end_t, places=3)
def get_points_from_GUI(start_point, end_point, control_point, width, height, cacheLoc): real_start_point = start_point * np.array([width/100, height/100]) real_control_point = control_point * np.array([width/100, height/100]) real_end_point = end_point * np.array([width/100, height/100]) curve_segment_length = 1 curve = BezierCurve( start_point = real_start_point, control_point = real_control_point, end_point = real_end_point ) if cacheLoc is not None: return curve.split_curve_equally_with_cache(curve_segment_length, cacheLoc) else: return curve.split_curve_equally(curve_segment_length)
def test_get_parametrized_point_end_point(self): curve = BezierCurve(start_point=np.array([30, 30]), end_point=np.array([40, 20]), control_point=np.array([10, 10])) self._compare_points(curve.end_point, curve.get_parametrized_point(1))