public void IntersectingRayGrouTestChildrenIfBoxHit() { var child = new shape.TestShape(); var shape = new shape.Group(); shape.Add(child); var r = new Ray(pt.Point(0, 0, -5), pt.Vector(0, 0, 1)); _ = shape.Intersect(r); Assert.NotNull(child.SavedRay); }
public void IntersectingRayWithNonemptyGroup() { var g = new shape.Group(); var s1 = new shape.Sphere(); var s2 = new shape.Sphere(transform.Translation(0, 0, -3)); var s3 = new shape.Sphere(transform.Translation(5, 0, 0)); g.Add(s1); g.Add(s2); g.Add(s3); var r = new Ray(pt.Point(0, 0, -5), pt.Vector(0, 0, 1)); var xs = g.Intersect(r); Assert.Equal(4, xs.Count()); Assert.Equal(s2, xs[0].Object); Assert.Equal(s2, xs[1].Object); Assert.Equal(s1, xs[2].Object); Assert.Equal(s1, xs[3].Object); }
public void AddingChildToGroup() { var g = new shape.Group(); var s = new shape.TestShape(); g.Add(s); Assert.NotEmpty(g.Children); Assert.Contains(s, g.Children); Assert.Equal(g, s.Parent); }
private shapes.Group Hexagon() { var hex = new shapes.Group(); for (int i = 0; i <= 5; i++) { var side = HexagonSide(); side.Transform = transform.RotationY(i * Math.PI / 3); hex.Add(side); } return(hex); }
public void IntersectingATransformedGroup() { var g = new shape.Group(transform.Scaling(2, 2, 2)); var s = new shape.Sphere(transform.Translation(5, 0, 0)); g.Add(s); var r = new Ray(pt.Point(10, 0, -10), pt.Vector(0, 0, 1)); var xs = g.Intersect(r); Assert.Equal(2, xs.Count()); }
public void GroupHasBoundingBoxContainsItsChildren() { var s = new shape.Sphere() { Transform = transform.Translation(2, 5, -3) * transform.Scaling(2, 2, 2) }; var c = new shape.Cylinder() { Minimum = -2, Maximum = 2, Transform = transform.Translation(-4, -1, 4) * transform.Scaling(0.5, 1, 0.5) }; var shape = new shape.Group(); shape.Add(s); shape.Add(c); var box = shape.Bounds(); Assert.Equal(pt.Point(-4.5, -3, -5), box.Minimum); Assert.Equal(pt.Point(4, 7, 4.5), box.Maximum); }
public void FindingNormalOnChildObject() { var g1 = new shape.Group(transform.RotationY(Math.PI / 2)); var g2 = new shape.Group(transform.Scaling(1, 2, 3)); g1.Add(g2); var s = new shape.Sphere(transform.Translation(5, 0, 0)); g2.Add(s); var n = s.NormalAt(pt.Point(1.7311, 1.1547, -5.5774)); //TODO precision error CustomAssert.Equal(pt.Vector(0.2856, 0.4286, -0.8572), n, 4); }
public void ConvertingNormalFromObjectToWorldSpace() { var g1 = new shape.Group(transform.RotationY(Math.PI / 2)); var g2 = new shape.Group(transform.Scaling(1, 2, 3)); g1.Add(g2); var s = new shape.Sphere(transform.Translation(5, 0, 0)); g2.Add(s); var value = Math.Sqrt(3) / 3; var n = s.NormalToWorld(pt.Vector(value, value, value)); CustomAssert.Equal(pt.Vector(0.2857, 0.4286, -0.8571), n, 4); }
public void ConvertingPointFromWorldToObjectSpace() { var g1 = new shape.Group(transform.RotationY(Math.PI / 2)); var g2 = new shape.Group(transform.Scaling(2, 2, 2)); g1.Add(g2); var s = new shape.Sphere(transform.Translation(5, 0, 0)); g2.Add(s); var p = s.WorldToObject(pt.Point(-2, 0, -10)); CustomAssert.Equal(pt.Point(0, 0, -1), p, 5); }
public void PartitioningGroupChildren() { var s1 = new shape.Sphere(transform.Translation(-2, 0, 0)); var s2 = new shape.Sphere(transform.Translation(2, 0, 0)); var s3 = new shape.Sphere(); var g = new shape.Group(); g.Add(new List <shape.Shape>() { s1, s2, s3 }); (List <shape.Shape> left, List <shape.Shape> right) = g.Partition(); Assert.Equal(1, g.Count()); Assert.Single(left); Assert.Equal(s1, left[0]); Assert.Single(right); Assert.Equal(s2, right[0]); }