public void ConstructingRayThroughCenterCanvas()
        {
            var c = new RTF.Camera(201, 101, Math.PI / 2);
            var r = c.RayForPixel(100, 50);

            Assert.Equal(RTF.PointType.Point(0, 0, 0), r.Origin);
            CustomAssert.Equal(RTF.PointType.Vector(0, 0, -1), r.Direction, 5);
        }
        public void ConstructingRayThroughCornerCanvas()
        {
            var c = new RTF.Camera(201, 101, Math.PI / 2);
            var r = c.RayForPixel(0, 0);

            Assert.Equal(RTF.PointType.Point(0, 0, 0), r.Origin);
            CustomAssert.Equal(
                RTF.PointType.Vector(0.66519, 0.33259, -0.66851),
                r.Direction,
                5);
        }
        public void ConstructingRayWhenCameraTransformed()
        {
            var c = new RTF.Camera(201, 101, Math.PI / 2)
            {
                Transform = RTH.Transformations.RotationY(Math.PI / 4)
                            * RTH.Transformations.Translation(0, -2, 5)
            };
            var r = c.RayForPixel(100, 50);

            Assert.Equal(RTF.PointType.Point(0, 2, -5), r.Origin);
            CustomAssert.Equal(
                RTF.PointType.Vector(Math.Sqrt(2) / 2, 0, -Math.Sqrt(2) / 2),
                r.Direction,
                5);
        }