def test_ray(self): r = Ray(Point(1, 1), pi / 4) self.assertAlmostEqual(r.origin(), Point(1, 1)) self.assertAlmostEqual(r.versor(), Point(1, 1) / sqrt(2)) self.assertAlmostEqual(r.angle(), pi / 4) r.set_origin(Point(4, 3)) #TODO this should maybe normalize the versor! r.set_versor(Point(1, -1) / sqrt(2)) self.assertAlmostEqual(r.origin(), Point(4, 3)) self.assertAlmostEqual(r.versor(), Point(1, -1) / sqrt(2)) self.assertAlmostEqual(r.angle(), -pi / 4) r.set_points(Point(1, 1), Point(1, 3)) self.assertFalse(r.is_degenerate()) self.assertFalse(Ray().is_degenerate()) self.assertAlmostEqual(r.point_at(4), Point(1, 5)) #TODO I think this should be expected behaviour # self.assertAlmostEqual( # r.pointAt(-3), # Point(1, 1))) self.assertAlmostEqual(r.value_at(4, 0), 1) self.assertAlmostEqual(r.value_at(4, 1), 5) roots = r.roots(3, 1) for root in roots: self.assertAlmostEqual(r.value_at(root, 1), 3) self.assertAlmostEqual( r.point_at(3) - r.origin(), r.origin() - r.reverse().point_at(3)) self.assertAlmostEqual(Ray.distance(Point(), r), sqrt(2)) self.assertAlmostEqual(Ray.distance(Point() + r.versor(), r), 1) self.assertTrue(Ray.are_near(Point(), r, 2)) self.assertFalse(Ray.are_near(Point(), r)) self.assertTrue(Ray.are_same(r, r)) q = Ray(r.origin(), r.angle()) self.assertTrue(Ray.are_same(r, q)) q.set_origin(r.origin() + Point(0, 1)) self.assertFalse(Ray.are_same(r, q)) #TODO shouldn't this really be 0? self.assertAlmostEqual(Ray.angle_between(r, q), 2 * pi) q.set_versor(Point(1, 0)) q.set_origin(r.origin()) self.assertAlmostEqual( Point(1, 1) / sqrt(2), Ray.make_angle_bisector_ray(q, r).versor()) q.set_angle(pi / 7) self.assertAlmostEqual(q.angle(), pi / 7) self.assertIsInstance(q.portion(2, 4), Curve) self.assertAlmostEqual(q.portion(2, 4)(0), q.point_at(2)) self.assertIsInstance(q.segment(1, 5), LineSegment) self.assertAlmostEqual(q.segment(1, 5)(1), q.point_at(5))
def test_ray(self): r = Ray(Point(1,1), pi/4) self.assertAlmostEqual(r.origin(), Point(1, 1)) self.assertAlmostEqual(r.versor(), Point(1, 1)/sqrt(2)) self.assertAlmostEqual(r.angle(), pi/4) r.set_origin(Point(4, 3)) #TODO this should maybe normalize the versor! r.set_versor(Point(1, -1)/sqrt(2)) self.assertAlmostEqual(r.origin(), Point(4, 3)) self.assertAlmostEqual(r.versor(), Point(1, -1)/sqrt(2)) self.assertAlmostEqual(r.angle(), -pi/4) r.set_points(Point(1, 1), Point(1, 3)) self.assertFalse(r.is_degenerate()) self.assertFalse(Ray().is_degenerate()) self.assertAlmostEqual(r.point_at(4), Point(1, 5)) #TODO I think this should be expected behaviour # self.assertAlmostEqual( # r.pointAt(-3), # Point(1, 1))) self.assertAlmostEqual(r.value_at(4, 0), 1) self.assertAlmostEqual(r.value_at(4, 1), 5) roots = r.roots( 3, 1 ) for root in roots: self.assertAlmostEqual( r.value_at(root, 1), 3) self.assertAlmostEqual( r.point_at(3) - r.origin(), r.origin()-r.reverse().point_at(3)) self.assertAlmostEqual(Ray.distance(Point(), r), sqrt(2)) self.assertAlmostEqual(Ray.distance(Point()+r.versor(), r), 1) self.assertTrue(Ray.are_near(Point(), r, 2)) self.assertFalse(Ray.are_near(Point(), r)) self.assertTrue(Ray.are_same(r, r)) q = Ray(r.origin(), r.angle()) self.assertTrue(Ray.are_same(r, q)) q.set_origin(r.origin()+Point(0, 1)) self.assertFalse(Ray.are_same(r, q)) #TODO shouldn't this really be 0? self.assertAlmostEqual(Ray.angle_between(r, q), 2*pi) q.set_versor(Point(1, 0)) q.set_origin(r.origin()) self.assertAlmostEqual( Point(1, 1)/sqrt(2), Ray.make_angle_bisector_ray(q, r).versor()) q.set_angle(pi/7) self.assertAlmostEqual(q.angle(), pi/7) self.assertIsInstance(q.portion(2, 4), Curve) self.assertAlmostEqual(q.portion(2, 4)(0), q.point_at(2)) self.assertIsInstance(q.segment(1, 5), LineSegment) self.assertAlmostEqual(q.segment(1, 5)(1), q.point_at(5))