public void CropBy_Plane_with_two_plane_orientations_yields_polygons_lying_on_respective_halfspaces_whose_area_sum_is_the_area_of_the_original_polygon() { var rectangles = new List <IPolygon> { new Box2(minX: 0, minY: 0, width: 2, height: 2), new Box2(minX: -1, minY: -1, width: 4, height: 2), new Box2(minX: -1, minY: -1, width: 2, height: 4) }; var polygon2 = PolygonUtils.Union(rectangles); var cs = new RotoTranslation3(new Rotation3(new Quaternion(1.1, -2.2, 3.3, -4.4)), new Vector3(4.1, -2.4, 1.3)); var polygon3 = new Polygon3(cs, polygon2); var point1 = polygon3.PlaneToSpace(new Vector2(0.1, 0.2)); var point2 = polygon3.PlaneToSpace(new Vector2(0.9, 0.7)); var point3 = new Vector3(3.141, 2.718, 0.577); var plane = Plane.Through(point1, point2, point3); var half1 = polygon3.CropBy(plane); var half2 = polygon3.CropBy(plane.Reverse); Expect(half1.IsOnNegativeSide(Plane.ParallelTo(plane, _tolerance))); Expect(half2.IsOnPositiveSide(Plane.ParallelTo(plane, -_tolerance))); Expect(half1.InPlane.Area() + half2.InPlane.Area(), Is.EqualTo(polygon3.InPlane.Area()).Within(_tolerance)); }
public TransformedPolysurface(IPolysurface localSurface, RotoTranslation3 localToGlobal) { _localSurface = localSurface; _localToGlobal = localToGlobal; _vertexCollection = new VertexCollection(this); _edgeCollection = new EdgeCollection(this); _faceCollection = new FaceCollection(this); _undirectedComparer = new UndirectedEdgeComparerImpl(this); }
public void TransformedPolysurface_Face_normals_result_from_original_IPolysurface_Face_normals_by_applying_Rotation3() { var origSurface = MockPolysurface(); var transformation = new RotoTranslation3(new Rotation3(new Quaternion(1.1, -2.2, 3.3, -4.4)), new Vector3(4.1, -2.4, 1.3)); var transSurface = new TransformedPolysurface(origSurface, transformation); var normal = transSurface.Faces.ElementAt(1).Normal; Expect(Vector3.Distance(normal, transformation.Rotation * MockFaceNormal(1)), Is.LessThan(_tolerance)); }
public void TransformedPolysurface_Vertex_points_result_from_original_IPolysurface_Vertex_points_by_applying_RotoTranslation3() { var origSurface = MockPolysurface(); var transformation = new RotoTranslation3(new Rotation3(new Quaternion(1.1, -2.2, 3.3, -4.4)), new Vector3(4.1, -2.4, 1.3)); var transSurface = new TransformedPolysurface(origSurface, transformation); var point = transSurface.Vertices.ElementAt(1).Point; Expect(Vector3.Distance(point, transformation.Apply(MockVertexPoint(1))), Is.LessThan(_tolerance)); }
public void TransformedPolysurface_Face_polygons_result_from_original_IPolysurface_Face_polygons_by_applying_RotoTranslation3() { var origSurface = MockPolysurface(); var transformation = new RotoTranslation3(new Rotation3(new Quaternion(1.1, -2.2, 3.3, -4.4)), new Vector3(4.1, -2.4, 1.3)); var transSurface = new TransformedPolysurface(origSurface, transformation); var polygon = transSurface.Faces.ElementAt(1).Polygon; var actualVertex = polygon.Contours().First().Vertices.First(); var expectedVertex = transformation.Apply(MockFacePolygon(1)).Contours().First().Vertices.First(); Expect(Vector3.Distance(actualVertex, expectedVertex), Is.LessThan(_tolerance)); }
public void CropVisible_returns_null_when_LocalModel_CropVisible_returns_null() { var localModel = Mock.Of <IImageModel>(model => model.CropVisible(It.IsAny <Segment3>()) == null); var localToGlobal = new RotoTranslation3((Rotation3) new Quaternion(1.1, 2.2, 3.3, 4.4), new Vector3(1.23, 4.56, 2.56)); var globalModel = new TransformedImageModel(localModel, localToGlobal); var segment = new Segment3(new Vector3(7, 8, 9), new Vector3(-1, -2, -4)); var crop = globalModel.CropVisible(segment); Expect(crop == null); }
public void CropVisible_returns_correct_result_when_LocalModel_CropVisible_returns_not_null() { var point = new Vector3(3.141, 0.577, 2.718); var localModelMock = new Mock <IImageModel>(); localModelMock.Setup(model => model.CropVisible(It.IsAny <Segment3>())).Returns((Segment3 s) => new Segment3(s.Start, point)); var localToGlobal = new RotoTranslation3((Rotation3) new Quaternion(1.1, 2.2, 3.3, 4.4), new Vector3(1.23, 4.56, 2.56)); var globalModel = new TransformedImageModel(localModelMock.Object, localToGlobal); var segment = new Segment3(new Vector3(7, 8, 9), new Vector3(-1, -2, -4)); var crop = globalModel.CropVisible(segment); var transPoint = localToGlobal.Apply(point); Expect(crop != null); Expect(Vector3.Distance(crop.Value.Start, segment.Start), Is.LessThan(_tolerance)); Expect(Vector3.Distance(crop.Value.End, transPoint), Is.LessThan(_tolerance)); }
public TransformedPolyhedron(IPolyhedron localPolyhedron, RotoTranslation3 localToGlobal) : base(localPolyhedron, localToGlobal) { _localPolyhedron = localPolyhedron; }
public Polygon3(RotoTranslation3 coordinateSystem, IPolygon polygon) { _coordinateSystem = coordinateSystem; _polygon = polygon; }
public TransformedImageModel(IImageModel localModel, RotoTranslation3 localToGlobal) { _localModel = localModel; _localToGlobal = localToGlobal; }