Example #1
0
        public void MagnitudeOfVector_WithVectorOfMinusOneTwoThree()
        {
            var tuple  = new Vector(-1, -2, -3);
            var result = tuple.Magnitude();

            Assert.IsTrue(DoubleUtils.DoubleEquals(Math.Sqrt(14), result), $"Expecting: 1, actual: {result}");
        }
Example #2
0
        public void MagnitudeOfVector_WithZOfOne()
        {
            var tuple  = new Vector(0, 0, 1);
            var result = tuple.Magnitude();

            Assert.IsTrue(DoubleUtils.DoubleEquals(1, result), $"Expecting: 1, actual: {result}");
        }
Example #3
0
        public override Colour PatternAt(Point point)
        {
            var testValue = Math.Floor(Math.Sqrt((point.X * point.X) + (point.Z * point.Z))) % 2;

            if (DoubleUtils.DoubleEquals(testValue, 0))
            {
                return(A);
            }

            return(B);
        }
 public override bool Equals(object obj)
 {
     if (obj != null)
     {
         if (obj is Sphere compareSphere)
         {
             return(DoubleUtils.DoubleEquals(this.Radius, compareSphere.Radius) &&
                    this.Origin.Equals(compareSphere.Origin) &&
                    this.Material.Equals(compareSphere.Material) &&
                    this.Transform.Equals(compareSphere.Transform));
         }
     }
     return(false);
 }
        public void SchlickWithSmallAngleAndN2GreaterThanN1()
        {
            var shape = Sphere.GlassSphere();
            var ray   = new Ray(new Point(0, 0.99, -2), new Vector(0, 0, 1));
            var xs    = new List <Intersection>
            {
                new Intersection(1.8589, shape),
            };

            var comps       = xs[0].PrepareComputations(ray, xs);
            var reflectance = SchlickReflectance.Schlick(comps);

            Assert.IsTrue(DoubleUtils.DoubleEquals(0.48873, reflectance));
        }
        protected override Vector LocalNormalAt(Point localPoint)
        {
            var maxC = new double[] { Math.Abs(localPoint.X), Math.Abs(localPoint.Y), Math.Abs(localPoint.Z) }.Max();

            if (DoubleUtils.DoubleEquals(Math.Abs(localPoint.X), maxC))
            {
                return(new Vector(localPoint.X, 0, 0));
            }
            else if (DoubleUtils.DoubleEquals(Math.Abs(localPoint.Y), maxC))
            {
                return(new Vector(0, localPoint.Y, 0));
            }

            return(new Vector(0, 0, localPoint.Z));
        }
        public void SchlickWithPerpendicularViewingAngle()
        {
            var shape = Sphere.GlassSphere();
            var ray   = new Ray(new Point(0, 0, 0), new Vector(0, 1, 0));
            var xs    = new List <Intersection>
            {
                new Intersection(-1, shape),
                new Intersection(1, shape)
            };

            var comps       = xs[1].PrepareComputations(ray, xs);
            var reflectance = SchlickReflectance.Schlick(comps);

            Assert.IsTrue(DoubleUtils.DoubleEquals(0.04, reflectance));
        }
        public void FindingN1AndN2AtIntersections(int index, double n1, double n2)
        {
            var sphereA = Sphere.GlassSphere();

            sphereA.Transform = Matrix.Scaling(2, 2, 2);
            sphereA.Material.RefractiveIndex = 1.5;

            var sphereB = Sphere.GlassSphere();

            sphereB.Transform = Matrix.Translation(0, 0, -0.25);
            sphereB.Material.RefractiveIndex = 2.0;

            var sphereC = Sphere.GlassSphere();

            sphereC.Transform = Matrix.Translation(0, 0, 0.25);
            sphereC.Material.RefractiveIndex = 2.5;

            var ray = new Ray(new Point(0, 0, -4), new Vector(0, 0, 1));

            var xs = new List <Intersection>
            {
                new Intersection(2, sphereA),
                new Intersection(2.75, sphereB),
                new Intersection(3.25, sphereC),
                new Intersection(4.75, sphereB),
                new Intersection(5.25, sphereC),
                new Intersection(6, sphereA)
            };

            var comps = xs[index].PrepareComputations(ray, xs);



            Assert.IsTrue(DoubleUtils.DoubleEquals(n1, comps.N1));
            Assert.IsTrue(DoubleUtils.DoubleEquals(n2, comps.N2));
        }
        public void DoubleEqualsTest(double a, double b, bool expectedResult)
        {
            var result = DoubleUtils.DoubleEquals(a, b);

            Assert.AreEqual(expectedResult, result);
        }
Example #10
0
        public void PixelSizeForVerticalCanvas()
        {
            var camera = new Camera(125, 200, Math.PI / 2);

            Assert.IsTrue(DoubleUtils.DoubleEquals(0.01, camera.PixelSize));
        }
Example #11
0
 public override bool   Equals(object obj) => this.Equals(obj, (a1, a2) => DoubleUtils.DoubleEquals(a1.PosValue.Value, a2.PosValue.Value));