当前位置: 首页>>代码示例>>C#>>正文


C# Sweep.DTSweepContext类代码示例

本文整理汇总了C#中FarseerPhysics.Common.Decomposition.CDT.Delaunay.Sweep.DTSweepContext的典型用法代码示例。如果您正苦于以下问题:C# DTSweepContext类的具体用法?C# DTSweepContext怎么用?C# DTSweepContext使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。


DTSweepContext类属于FarseerPhysics.Common.Decomposition.CDT.Delaunay.Sweep命名空间,在下文中一共展示了DTSweepContext类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: ConvexPartition

        public static List<Vertices> ConvexPartition(Vertices vertices)
        {
            Polygon poly = new Polygon();

            foreach (Vector2 vertex in vertices)
            {
                poly.Points.Add(new TriangulationPoint(vertex.X, vertex.Y));
            }

            DTSweepContext tcx = new DTSweepContext();
            tcx.PrepareTriangulation(poly);
            DTSweep.Triangulate(tcx);

            List<Vertices> results = new List<Vertices>();

            foreach (DelaunayTriangle triangle in poly.Triangles)
            {
                Vertices v = new Vertices();
                foreach (TriangulationPoint p in triangle.Points)
                {
                    v.Add(new Vector2((float)p.X, (float)p.Y));
                }
                results.Add(v);
            }

            return results;
        }
开发者ID:boris2,项目名称:mmogameproject2,代码行数:27,代码来源:CDTDecomposer.cs

示例2: Triangulate

        /// <summary>
        /// Triangulate simple polygon with holes
        /// </summary>
        public static void Triangulate(DTSweepContext tcx)
        {
            tcx.CreateAdvancingFront();

            Sweep(tcx);

            // Finalize triangulation
            if (tcx.TriangulationMode == TriangulationMode.Polygon)
            {
                FinalizationPolygon(tcx);
            }
            else
            {
                FinalizationConvexHull(tcx);
            }

            tcx.Done();
        }
开发者ID:Daramkun,项目名称:Misty,代码行数:21,代码来源:DTSweep.cs

示例3: Sweep

		/// <summary>
		/// Start sweeping the Y-sorted point set from bottom to top
		/// </summary>
		static void Sweep( DTSweepContext tcx )
		{
			List<TriangulationPoint> points = tcx.Points;

			for( int i = 1; i < points.Count; i++ )
			{
				TriangulationPoint point = points[i];

				AdvancingFrontNode node = PointEvent( tcx, point );

				if( point.HasEdges )
				{
					foreach( DTSweepConstraint e in point.Edges )
					{
						EdgeEvent( tcx, e, node );
					}
				}
				tcx.Update( null );
			}
		}
开发者ID:prime31,项目名称:Nez,代码行数:23,代码来源:DTSweep.cs

示例4: ConvexPartition

        /// <summary>
        /// Decompose the polygon into several smaller non-concave polygon.
        /// </summary>
        public static List<Vertices> ConvexPartition(Vertices vertices)
        {
            if (vertices.Count <= 3)
                return new List<Vertices> { vertices };

            Polygon poly = new Polygon();

            foreach (Vector2 vertex in vertices)
                poly.Points.Add(new TriangulationPoint(vertex.X, vertex.Y));

            if (vertices.Holes != null)
            {
                foreach (Vertices holeVertices in vertices.Holes)
                {
                    Polygon hole = new Polygon();

                    foreach (Vector2 vertex in holeVertices)
                        hole.Points.Add(new TriangulationPoint(vertex.X, vertex.Y));

                    poly.AddHole(hole);
                }
            }

            DTSweepContext tcx = new DTSweepContext();
            tcx.PrepareTriangulation(poly);
            DTSweep.Triangulate(tcx);

            List<Vertices> results = new List<Vertices>();

            foreach (DelaunayTriangle triangle in poly.Triangles)
            {
                Vertices v = new Vertices();
                foreach (TriangulationPoint p in triangle.Points)
                {
                    v.Add(new Vector2((float)p.X, (float)p.Y));
                }
                results.Add(v);
            }

            return results;
        }
开发者ID:shadowmint,项目名称:pongstar,代码行数:44,代码来源:CDTDecomposer.cs

示例5: FillRightBelowEdgeEvent

 private static void FillRightBelowEdgeEvent(DTSweepContext tcx, DTSweepConstraint edge, AdvancingFrontNode node)
 {
     if (node.Point.X < edge.P.X) // needed?
     {
         if (TriangulationUtil.Orient2d(node.Point, node.Next.Point, node.Next.Next.Point) == Orientation.CCW)
         {
             // Concave
             FillRightConcaveEdgeEvent(tcx, edge, node);
         }
         else
         {
             // Convex
             FillRightConvexEdgeEvent(tcx, edge, node);
             // Retry this one
             FillRightBelowEdgeEvent(tcx, edge, node);
         }
     }
 }
开发者ID:Daramkun,项目名称:Misty,代码行数:18,代码来源:DTSweep.cs

示例6: FillRightAboveEdgeEvent

 private static void FillRightAboveEdgeEvent(DTSweepContext tcx, DTSweepConstraint edge, AdvancingFrontNode node)
 {
     while (node.Next.Point.X < edge.P.X)
     {
         // Check if next node is below the edge
         Orientation o1 = TriangulationUtil.Orient2d(edge.Q, node.Next.Point, edge.P);
         if (o1 == Orientation.CCW)
         {
             FillRightBelowEdgeEvent(tcx, edge, node);
         }
         else
         {
             node = node.Next;
         }
     }
 }
开发者ID:Daramkun,项目名称:Misty,代码行数:16,代码来源:DTSweep.cs

示例7: NewFrontTriangle

        /// <summary>
        /// Creates a new front triangle and legalize it
        /// </summary>
        private static AdvancingFrontNode NewFrontTriangle(DTSweepContext tcx, TriangulationPoint point, AdvancingFrontNode node)
        {
            DelaunayTriangle triangle = new DelaunayTriangle(point, node.Point, node.Next.Point);
            triangle.MarkNeighbor(node.Triangle);
            tcx.Triangles.Add(triangle);

            AdvancingFrontNode newNode = new AdvancingFrontNode(point);
            newNode.Next = node.Next;
            newNode.Prev = node;
            node.Next.Prev = newNode;
            node.Next = newNode;

            tcx.AddNode(newNode); // XXX: BST

            if (!Legalize(tcx, triangle))
            {
                tcx.MapTriangleToNodes(triangle);
            }

            return newNode;
        }
开发者ID:Daramkun,项目名称:Misty,代码行数:24,代码来源:DTSweep.cs

示例8: IsShallow

        private static bool IsShallow(DTSweepContext tcx, AdvancingFrontNode node)
        {
            double height;

            if (tcx.Basin.leftHighest)
            {
                height = tcx.Basin.leftNode.Point.Y - node.Point.Y;
            }
            else
            {
                height = tcx.Basin.rightNode.Point.Y - node.Point.Y;
            }
            if (tcx.Basin.width > height)
            {
                return true;
            }
            return false;
        }
开发者ID:Daramkun,项目名称:Misty,代码行数:18,代码来源:DTSweep.cs

示例9: FinalizationPolygon

        private static void FinalizationPolygon(DTSweepContext tcx)
        {
            // Get an Internal triangle to start with
            DelaunayTriangle t = tcx.aFront.Head.Next.Triangle;
            TriangulationPoint p = tcx.aFront.Head.Next.Point;
            while (!t.GetConstrainedEdgeCW(p))
            {
                t = t.NeighborCCW(p);
            }

            // Collect interior triangles constrained by edges
            tcx.MeshClean(t);
        }
开发者ID:Daramkun,项目名称:Misty,代码行数:13,代码来源:DTSweep.cs

示例10: Fill

        /// <summary>
        /// Adds a triangle to the advancing front to fill a hole.
        /// </summary>
        /// <param name="tcx"></param>
        /// <param name="node">middle node, that is the bottom of the hole</param>
        private static void Fill(DTSweepContext tcx, AdvancingFrontNode node)
        {
            DelaunayTriangle triangle = new DelaunayTriangle(node.Prev.Point, node.Point, node.Next.Point);
            // TODO: should copy the cEdge value from neighbor triangles
            //       for now cEdge values are copied during the legalize
            triangle.MarkNeighbor(node.Prev.Triangle);
            triangle.MarkNeighbor(node.Triangle);
            tcx.Triangles.Add(triangle);

            // Update the advancing front
            node.Prev.Next = node.Next;
            node.Next.Prev = node.Prev;
            tcx.RemoveNode(node);

            // If it was legalized the triangle has already been mapped
            if (!Legalize(tcx, triangle))
            {
                tcx.MapTriangleToNodes(triangle);
            }
        }
开发者ID:Daramkun,项目名称:Misty,代码行数:25,代码来源:DTSweep.cs

示例11: EdgeEvent

        private static void EdgeEvent(DTSweepContext tcx, TriangulationPoint ep, TriangulationPoint eq, DelaunayTriangle triangle, TriangulationPoint point)
        {
            if (IsEdgeSideOfTriangle(triangle, ep, eq))
                return;

            TriangulationPoint p1 = triangle.PointCCW(point);
            Orientation o1 = TriangulationUtil.Orient2d(eq, p1, ep);
            if (o1 == Orientation.Collinear)
            {
                if (triangle.Contains(eq, p1))
                {
                    triangle.MarkConstrainedEdge(eq, p1);
                    // We are modifying the constraint maybe it would be better to
                    // not change the given constraint and just keep a variable for the new constraint
                    tcx.EdgeEvent.ConstrainedEdge.Q = p1;
                    triangle = triangle.NeighborAcross(point);
                    EdgeEvent(tcx, ep, p1, triangle, p1);
                }
                else
                {
                    throw new PointOnEdgeException("EdgeEvent - Point on constrained edge not supported yet");
                }
                return;
            }

            TriangulationPoint p2 = triangle.PointCW(point);
            Orientation o2 = TriangulationUtil.Orient2d(eq, p2, ep);
            if (o2 == Orientation.Collinear)
            {
                if (triangle.Contains(eq, p2))
                {
                    triangle.MarkConstrainedEdge(eq, p2);
                    // We are modifying the constraint maybe it would be better to
                    // not change the given constraint and just keep a variable for the new constraint
                    tcx.EdgeEvent.ConstrainedEdge.Q = p2;
                    triangle = triangle.NeighborAcross(point);
                    EdgeEvent(tcx, ep, p2, triangle, p2);
                }
                else
                {
                    throw new PointOnEdgeException("EdgeEvent - Point on constrained edge not supported yet");
                }
                return;
            }

            if (o1 == o2)
            {
                // Need to decide if we are rotating CW or CCW to get to a triangle
                // that will cross edge
                if (o1 == Orientation.CW)
                {
                    triangle = triangle.NeighborCCW(point);
                }
                else
                {
                    triangle = triangle.NeighborCW(point);
                }
                EdgeEvent(tcx, ep, eq, triangle, point);
            }
            else
            {
                // This triangle crosses constraint so lets flippin start!
                FlipEdgeEvent(tcx, ep, eq, triangle, point);
            }
        }
开发者ID:Daramkun,项目名称:Misty,代码行数:65,代码来源:DTSweep.cs

示例12: TurnAdvancingFrontConvex

 /// <summary>
 /// We will traverse the entire advancing front and fill it to form a convex hull.
 /// </summary>
 private static void TurnAdvancingFrontConvex(DTSweepContext tcx, AdvancingFrontNode b, AdvancingFrontNode c)
 {
     AdvancingFrontNode first = b;
     while (c != tcx.aFront.Tail)
     {
         if (TriangulationUtil.Orient2d(b.Point, c.Point, c.Next.Point) == Orientation.CCW)
         {
             // [b,c,d] Concave - fill around c
             Fill(tcx, c);
             c = c.Next;
         }
         else
         {
             // [b,c,d] Convex
             if (b != first && TriangulationUtil.Orient2d(b.Prev.Point, b.Point, c.Point) == Orientation.CCW)
             {
                 // [a,b,c] Concave - fill around b
                 Fill(tcx, b);
                 b = b.Prev;
             }
             else
             {
                 // [a,b,c] Convex - nothing to fill
                 b = c;
                 c = c.Next;
             }
         }
     }
 }
开发者ID:Daramkun,项目名称:Misty,代码行数:32,代码来源:DTSweep.cs

示例13: PointEvent

        /// <summary>
        /// Find closes node to the left of the new point and
        /// create a new triangle. If needed new holes and basins
        /// will be filled to.
        /// </summary>
        private static AdvancingFrontNode PointEvent(DTSweepContext tcx, TriangulationPoint point)
        {
            AdvancingFrontNode node = tcx.LocateNode(point);
            AdvancingFrontNode newNode = NewFrontTriangle(tcx, point, node);

            // Only need to check +epsilon since point never have smaller
            // x value than node due to how we fetch nodes from the front
            if (point.X <= node.Point.X + TriangulationUtil.EPSILON)
            {
                Fill(tcx, node);
            }

            tcx.AddNode(newNode);

            FillAdvancingFront(tcx, newNode);
            return newNode;
        }
开发者ID:Daramkun,项目名称:Misty,代码行数:22,代码来源:DTSweep.cs

示例14: FillLeftBelowEdgeEvent

		static void FillLeftBelowEdgeEvent( DTSweepContext tcx, DTSweepConstraint edge, AdvancingFrontNode node )
		{
			if( node.Point.X > edge.P.X )
			{
				if( TriangulationUtil.Orient2d( node.Point, node.Prev.Point, node.Prev.Prev.Point ) == Orientation.CW )
				{
					// Concave 
					FillLeftConcaveEdgeEvent( tcx, edge, node );
				}
				else
				{
					// Convex
					FillLeftConvexEdgeEvent( tcx, edge, node );
					// Retry this one
					FillLeftBelowEdgeEvent( tcx, edge, node );
				}
			}
		}
开发者ID:prime31,项目名称:Nez,代码行数:18,代码来源:DTSweep.cs

示例15: FillRightConvexEdgeEvent

 private static void FillRightConvexEdgeEvent(DTSweepContext tcx, DTSweepConstraint edge, AdvancingFrontNode node)
 {
     // Next concave or convex?
     if (TriangulationUtil.Orient2d(node.Next.Point, node.Next.Next.Point, node.Next.Next.Next.Point) ==
         Orientation.CCW)
     {
         // Concave
         FillRightConcaveEdgeEvent(tcx, edge, node.Next);
     }
     else
     {
         // Convex
         // Next above or below edge?
         if (TriangulationUtil.Orient2d(edge.Q, node.Next.Next.Point, edge.P) == Orientation.CCW)
         {
             // Below
             FillRightConvexEdgeEvent(tcx, edge, node.Next);
         }
         else
         {
             // Above
         }
     }
 }
开发者ID:Daramkun,项目名称:Misty,代码行数:24,代码来源:DTSweep.cs


注:本文中的FarseerPhysics.Common.Decomposition.CDT.Delaunay.Sweep.DTSweepContext类示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。