def test_affine(self): al = [] for i in range(10): al.append( Affine(uniform(-10, 10), uniform(-10, 10), uniform(-10, 10), uniform(-10, 10), uniform(-10, 10), uniform(-10, 10))) for A in al: for B in al: self.affine(A, B) o = Point(2, 4) v = Point(-1, 1) / sqrt(2) l = Line.from_origin_and_versor(o, v) R = Affine.reflection(v, o) for i in range(100): p = Point(randint(0, 100), randint(0, 100)) self.assertAlmostEqual(Line.distance(p, l), Line.distance(p * R, l)) self.assertTrue(Affine.are_near(R, R.inverse())) self.affine(R, R.inverse())
def test_affine(self): al = [] for i in range(10): al.append(Affine( uniform(-10, 10), uniform(-10, 10), uniform(-10, 10), uniform(-10, 10), uniform(-10, 10), uniform(-10, 10))) for A in al: for B in al: self.affine(A, B) o = Point(2, 4) v = Point(-1, 1)/sqrt(2) l = Line.from_origin_and_versor(o, v) R = Affine.reflection(v, o) for i in range(100): p = Point(randint(0, 100), randint(0, 100)) self.assertAlmostEqual(Line.distance(p, l), Line.distance(p*R, l)) self.assertTrue( Affine.are_near( R, R.inverse() ) ) self.affine(R, R.inverse())
def test_line(self): l = Line(Point(), pi / 4) self.assertAlmostEqual(l.origin(), Point()) self.assertAlmostEqual(l.versor(), Point(1, 1) / sqrt(2)) self.assertAlmostEqual(l.angle(), pi / 4) k = Line.from_points(Point(), Point(2, 1)) self.assertFalse(k.is_degenerate()) self.assertFalse(Line().is_degenerate()) self.assertAlmostEqual(l.point_at(sqrt(2)), Point(1, 1)) self.assertAlmostEqual(k.point_at(43), Point(k.value_at(43, 0), k.value_at(43, 1))) self.assertAlmostEqual(k.time_at(Point(4, 2)), sqrt(20)) self.assertAlmostEqual( k.time_at_projection(Point(4, 2) + Point(2, -4)), sqrt(20)) self.assertAlmostEqual( k.point_at(k.nearest_point(Point(4, 2) + Point(2, -4))), Point(4, 2)) self.assertAlmostEqual(k.time_at_projection(Point(3, 3)), -k.reverse().time_at_projection(Point(3, 3))) self.assertAlmostEqual(k.derivative().origin(), k.versor()) self.assertAlmostEqual(k.normal(), k.versor().cw()) roots = k.roots(3, 0) for root in roots: self.assertAlmostEqual(k.value_at(root, 0), 3) self.assertAlmostEqual(l.normal(), l.normal_and_dist()[0]) self.assertAlmostEqual(Line.distance(Point(), l), l.normal_and_dist()[1]) self.assertAlmostEqual(Line.distance(Point(-1, 1), l), sqrt(2)) self.assertTrue(Line.are_near(Point(0), l)) self.assertFalse(Line.are_near(Point(1, 1), k)) self.assertTrue(Line.are_near(Point(1, 1), k, 2)) p = Line(Point(1, 1)) p_orto = Line(Point(2, 3), pi / 2) p_para = Line(Point(2, 3)) p_same = Line.from_points(Point(1, 1), Point(5, 1)) self.assertTrue(Line.are_orthogonal(p, p_orto)) self.assertFalse(Line.are_orthogonal(p, p_para)) self.assertTrue(Line.are_parallel(p, p_para)) self.assertFalse(Line.are_parallel(p, p_orto)) self.assertTrue(Line.are_same(p, p_same)) self.assertFalse(Line.are_same(p, p_para)) self.assertTrue( Line.are_collinear(Point(1, 1), Point(2, 3), Point(4, 7))) self.assertAlmostEqual(Line.angle_between(p, p_orto), pi / 2) m = Line.from_normal_distance(Point(1, -1), 1) self.assertAlmostEqual(m.angle(), pi / 4) m = Line.from_LineSegment(LineSegment(Point(2, 2), Point(4, 4))) self.assertAlmostEqual(m.angle(), pi / 4) m = Line.from_Ray(Ray(Point(2, 3), 0.2)) self.assertAlmostEqual(m.angle(), 0.2) self.assertAlmostEqual(m.origin(), Point(2, 3)) self.assertIsInstance(m.portion(2, 4), Curve) self.assertAlmostEqual(m.portion(2, 4)(0), m.point_at(2)) self.assertIsInstance(m.segment(1, 5), LineSegment) self.assertAlmostEqual(m.segment(1, 5)(1), m.point_at(5)) self.assertAlmostEqual(m.ray(4).origin(), m.point_at(4)) m.set_origin(Point()) self.assertAlmostEqual(m.origin(), Point()) m.set_angle(0.2) self.assertAlmostEqual(m.angle(), 0.2) m.set_versor(Point()) self.assertTrue(m.is_degenerate()) m.set_points(Point(2, 9), Point(1, 8)) self.assertAlmostEqual(m.versor(), Point.unit_vector(Point(1, 8) - Point(2, 9)))
def test_line(self): l = Line(Point(), pi/4) self.assertAlmostEqual( l.origin(), Point() ) self.assertAlmostEqual( l.versor(), Point(1, 1)/sqrt(2) ) self.assertAlmostEqual( l.angle(), pi/4 ) k = Line.from_points(Point(), Point(2, 1)) self.assertFalse(k.is_degenerate()) self.assertFalse(Line().is_degenerate()) self.assertAlmostEqual( l.point_at(sqrt(2)), Point(1,1) ) self.assertAlmostEqual( k.point_at(43), Point(k.value_at(43, 0), k.value_at(43, 1))) self.assertAlmostEqual(k.time_at(Point(4, 2)), sqrt(20)) self.assertAlmostEqual( k.time_at_projection(Point(4, 2) + Point(2, -4)), sqrt(20)) self.assertAlmostEqual( k.point_at(k.nearest_point(Point(4, 2) + Point(2, -4))), Point(4,2)) self.assertAlmostEqual( k.time_at_projection(Point(3, 3)), -k.reverse().time_at_projection(Point(3, 3))) self.assertAlmostEqual( k.derivative().origin(), k.versor()) self.assertAlmostEqual(k.normal(), k.versor().cw()) roots = k.roots( 3, 0 ) for root in roots: self.assertAlmostEqual( k.value_at(root, 0), 3) self.assertAlmostEqual(l.normal(), l.normal_and_dist()[0]) self.assertAlmostEqual(Line.distance(Point(), l), l.normal_and_dist()[1]) self.assertAlmostEqual(Line.distance(Point(-1, 1), l), sqrt(2)) self.assertTrue(Line.are_near(Point(0), l)) self.assertFalse(Line.are_near(Point(1, 1), k)) self.assertTrue(Line.are_near(Point(1, 1), k, 2)) p = Line(Point(1, 1)) p_orto = Line(Point(2, 3), pi/2) p_para = Line(Point(2, 3)) p_same = Line.from_points(Point(1, 1), Point(5, 1)) self.assertTrue(Line.are_orthogonal(p, p_orto)) self.assertFalse(Line.are_orthogonal(p, p_para)) self.assertTrue(Line.are_parallel(p, p_para)) self.assertFalse(Line.are_parallel(p, p_orto)) self.assertTrue(Line.are_same(p, p_same)) self.assertFalse(Line.are_same(p, p_para)) self.assertTrue(Line.are_collinear( Point(1,1), Point(2, 3), Point(4, 7))) self.assertAlmostEqual(Line.angle_between(p, p_orto), pi/2) m = Line.from_normal_distance(Point(1, -1), 1) self.assertAlmostEqual(m.angle(), pi/4) m = Line.from_LineSegment( LineSegment( Point(2, 2), Point(4, 4) ) ) self.assertAlmostEqual(m.angle(), pi/4) m = Line.from_Ray( Ray(Point(2, 3), 0.2) ) self.assertAlmostEqual(m.angle(), 0.2) self.assertAlmostEqual(m.origin(), Point(2, 3)) self.assertIsInstance(m.portion(2, 4), Curve) self.assertAlmostEqual(m.portion(2, 4)(0), m.point_at(2)) self.assertIsInstance(m.segment(1, 5), LineSegment) self.assertAlmostEqual(m.segment(1, 5)(1), m.point_at(5)) self.assertAlmostEqual(m.ray(4).origin(), m.point_at(4)) m.set_origin(Point()) self.assertAlmostEqual(m.origin(), Point()) m.set_angle(0.2) self.assertAlmostEqual(m.angle(), 0.2) m.set_versor(Point()) self.assertTrue(m.is_degenerate()) m.set_points(Point(2, 9), Point(1, 8)) self.assertAlmostEqual(m.versor(), Point.unit_vector(Point(1, 8) - Point(2, 9)))