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}"); }
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}"); }
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); }
public void PixelSizeForVerticalCanvas() { var camera = new Camera(125, 200, Math.PI / 2); Assert.IsTrue(DoubleUtils.DoubleEquals(0.01, camera.PixelSize)); }
public override bool Equals(object obj) => this.Equals(obj, (a1, a2) => DoubleUtils.DoubleEquals(a1.PosValue.Value, a2.PosValue.Value));