static public List <Edge> GetAxis(Point3D center, Mode m, OrtMode om, int c) { List <Edge> res = new List <Edge>(); Edge3D x = new Edge3D(center, new Point3D(center.X + 200, center.Y, center.Z)); Edge3D y = new Edge3D(center, new Point3D(center.X, center.Y - 200, center.Z)); Edge3D z = new Edge3D(center, new Point3D(center.X, center.Y, center.Z + 200)); switch (m) { case Mode.Orthographic: res.Add(EdgeToProjection(x, Mode.Orthographic, om)); res.Add(EdgeToProjection(y, Mode.Orthographic, om)); res.Add(EdgeToProjection(z, Mode.Orthographic, om)); break; case Mode.Isometric: res.Add(EdgeToProjection(x, Mode.Isometric)); res.Add(EdgeToProjection(y, Mode.Isometric)); res.Add(EdgeToProjection(z, Mode.Isometric)); break; case Mode.Perspective: res.Add(EdgeToProjection(x, Mode.Perspective, OrtMode.XY, 1600)); res.Add(EdgeToProjection(y, Mode.Perspective, OrtMode.XY, 1600)); res.Add(EdgeToProjection(z, Mode.Perspective, OrtMode.XY, 1600)); break; } return(res); }
private Edge ToIsometric(Edge3D e) { var new_start = VectorToPoint(MatrixMultiplication(PointToVector(e.start), isometric_matr)); var new_end = VectorToPoint(MatrixMultiplication(PointToVector(e.end), isometric_matr)); return(new Edge(new_start, new_end)); }
private Edge ToOrtographics(Edge3D e) { var new_start = VectorToPoint(MatrixMultiplication(PointToVector(e.start), ortographics_matr)); var new_end = VectorToPoint(MatrixMultiplication(PointToVector(e.end), ortographics_matr)); return(new Edge(new_start, new_end)); }
public void OctTreeEdge3DQueryTest() { var tree = new OctTreeEdge3D(2, 10); var e1 = new Edge3D(new Point3D(0, 1, 0), new Point3D(1, 0, 1)); var e2 = new Edge3D(new Point3D(5, 5, 5), new Point3D(15, 15, 15)); tree.AddItem(e1); var items = tree.GetItemsWithinRadius(e1, 5).ToList(); Assert.AreEqual(1, items.Count); Assert.AreEqual(true, items.Contains(e1)); tree.AddItem(e2); items = tree.GetItemsWithinRadius(e1, 5).ToList(); Assert.AreEqual(2, items.Count); Assert.AreEqual(true, items.Contains(e1)); Assert.AreEqual(true, items.Contains(e2)); items = tree.GetItemsWithinRadius(e1, 0).ToList(); Assert.AreEqual(1, items.Count); Assert.AreEqual(true, items.Contains(e1)); Assert.AreEqual(false, items.Contains(e2)); }
private Edge ToPerspective(Edge3D e) { var new_start = VectorToPoint(MatrixMultiplication(PointToVector(e.start), perspective_matr)); var new_end = VectorToPoint(MatrixMultiplication(PointToVector(e.end), perspective_matr)); return(new Edge(new_start, new_end)); }
private long GetEdgeKey(Edge3D edge) { var leftTriangleFaceHash = edge.ConnectedTriangles.First.Value.SourceFace.Id; var rightTriangleFaceHash = edge.ConnectedTriangles.Last.Value.SourceFace.Id; return(leftTriangleFaceHash > rightTriangleFaceHash ? ((long)leftTriangleFaceHash << 32) + rightTriangleFaceHash : ((long)rightTriangleFaceHash << 32) + leftTriangleFaceHash); }
private void OZ_Click(object sender, EventArgs e) { OX.Enabled = true; OY.Enabled = true; OZ.Enabled = false; Custom.Enabled = true; Point3D center = cur_polyhedron.center(); RAL = new Edge3D(new Point3D(center.X, center.Y, center.Z), new Point3D(0, 0, 1)); }
public void Edge3DCreationTest() { var source = new Point3D(0, 2, 0); var target = new Point3D(2, 0, 2); var edge = new Edge3D(source, target); Assert.AreEqual(source, edge.Source); Assert.AreEqual(new Point3D(1, 1, 1), edge.Midpoint); Assert.AreEqual(target, edge.Target); }
public void Edge3DBoundaryTest() { var source = new Point3D(2, 2, 0); var target = new Point3D(-2, 0, 2); var edge = new Edge3D(source, target); var boundary = edge.Boundary; Assert.AreEqual(new Point3D(-2, 0, 0), boundary.Min); Assert.AreEqual(new Point3D(2, 2, 2), boundary.Max); }
public static Point3D NormalizedVector(Edge3D line) { Point3D lvector = new Point3D(line.end.X - line.start.X, line.end.Y - line.start.Y, line.end.Z - line.start.Z); //нормализуем вектор, заданный линией double len = Math.Sqrt(lvector.X * lvector.X + lvector.Y * lvector.Y + lvector.Z * lvector.Z); double l = (lvector.X / len); double m = (lvector.Y / len); double n = (lvector.Z / len); return(new Point3D((float)l, (float)m, (float)n)); }
private void Rota_Click(object sender, EventArgs e) { cur_state = State.RotateAroundLine; rotateAroundLine.Enabled = false; OX.Enabled = false; OY.Enabled = true; OZ.Enabled = true; Custom.Enabled = true; button3.Enabled = true; scaleButton.Enabled = true; Point3D center = cur_polyhedron.center(); RAL = new Edge3D(new Point3D(center.X, center.Y, center.Z), new Point3D(1, 0, 0)); }
private Vertex3D FindOrAddVertex(Edge3D e) { Vertex3D v; if (!centerVertex.TryGetValue(e, out v)) { v = e.Center; v.extID = vertex.Count; MoveToSurface(v); vertex.Add(v); centerVertex.Add(e, v); } return(v); }
private Edge3D FindOrAddEdge(Vertex3D v1, Vertex3D v2) { Predicate <Edge3D> cond = (e) => { return(((e.V1 == v1) & (e.V2 == v2)) | ((e.V1 == v2) & (e.V2 == v1))); }; Edge3D ed = edge.Find(cond); if (ed == null) { ed = new Edge3D(v1, v2); edge.Add(ed); } return(ed); }
public Edge Project(Mode m, Edge3D e) { switch (m) { case Mode.Orthographic: return(ToOrtographics(e)); case Mode.Isometric: return(ToIsometric(e)); case Mode.Perspective: return(ToPerspective(e)); default: return(new Edge(new PointF(-1, -1), new PointF(-1, -1))); } }
private void Custom_Click(object sender, EventArgs e) { OX.Enabled = true; OY.Enabled = true; OZ.Enabled = true; Custom.Enabled = false; float x1 = 0; float y1 = 0; float z1 = 0; float x2 = 0; float y2 = 0; float z2 = 0; if (float.TryParse(s_x.Text, out x1) && float.TryParse(s_y.Text, out y1) && float.TryParse(s_z.Text, out z1) && float.TryParse(e_x.Text, out x2) && float.TryParse(e_y.Text, out y2) && float.TryParse(e_z.Text, out z2)) { RAL = new Edge3D(new Point3D(x1, y1, z1), NormalizedVector(new Edge3D(new Point3D(x1, y1, z1), new Point3D(x2, y2, z2)))); } }
private Edge3D GetOrCreateEdgeBetween(Vertex3D v1, Vertex3D v2) { foreach (var face in v1.ConnectedTriangles) { for (var i = 0; i < 3; i++) { if (v1 == face.Vertices[i] && v2 == face.Vertices[(i + 1) % 3] || v2 == face.Vertices[i] && v1 == face.Vertices[(i + 1) % 3]) { return(face.Edges[i]); } } } var newEdge = new Edge3D(v1, v2); Edges.Add(newEdge); return(newEdge); }
static public Edge EdgeToProjection(Edge3D e, Mode m, OrtMode om = OrtMode.XY, int c = 0) { double[,] matr = new double[4, 4]; switch (m) { case Mode.Orthographic: matr = FormOrtoghraphicsMatr(om); break; case Mode.Isometric: matr = FormIsometricMatr(); break; case Mode.Perspective: matr = FormPerspectiveMatr(c); break; } var new_start = VectorToPoint(MatrixMultiplication(PointToVector(e.start), matr)); var new_end = VectorToPoint(MatrixMultiplication(PointToVector(e.end), matr)); return(new Edge(new_start, new_end)); }
public EdgeNormal(Edge3D edge, Vector3d normal) { Edge = edge; Normal = normal; }
public bool Equals(Edge3D other) { return(this == other); }
public void Parse(string Input) { double AllX = 0, AllY = 0, AllZ = 0; double X, Y, Z; string[] Arr = Input.Split(new string[] { Environment.NewLine }, StringSplitOptions.None); int Length = Arr.Length; string[] Row; for (int i = 0; i < Length; i++) { if (Arr[i] != "" && Arr[i][0] != '#') switch (Arr[i].Substring(0, 2)) { case "v ": Row = Arr[i].Split(null as string[], StringSplitOptions.RemoveEmptyEntries); Array.Resize(ref Points, ++PLength); X = double.Parse(Row[1], System.Globalization.CultureInfo.InvariantCulture); Y = double.Parse(Row[2], System.Globalization.CultureInfo.InvariantCulture); Z = double.Parse(Row[3], System.Globalization.CultureInfo.InvariantCulture); AllX += X; AllY += Y; AllZ += Z; Points[PLength - 1] = new Math3D.Point3D(X, Y, Z); break; case "f ": Row = Arr[i].Split(' '); string[] Temp; int[] F = new int[3]; for (int k = 1; k <= 3; k++) { Temp = Row[k].Split('/'); F[k - 1] = int.Parse(Temp[0]); } Array.Resize(ref Polygons, ++RLength); Polygons[RLength - 1] = new Polygon3D(F[0], F[1], F[2]); Array.Resize(ref Edges, ELength + 3); ELength += 3; Edges[ELength - 3] = new Edge3D(F[0], F[1]); Edges[ELength - 2] = new Edge3D(F[1], F[2]); Edges[ELength - 1] = new Edge3D(F[2], F[0]); break; } } Origin = new Math3D.Point3D(AllX / PLength, AllY / PLength, AllZ / PLength); }