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


C# Circle.Intersects方法代码示例

本文整理汇总了C#中Circle.Intersects方法的典型用法代码示例。如果您正苦于以下问题:C# Circle.Intersects方法的具体用法?C# Circle.Intersects怎么用?C# Circle.Intersects使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Circle的用法示例。


在下文中一共展示了Circle.Intersects方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: TestCirclesIntersects

        /// <summary>
        /// tests that the circle.Intersects method properly determines whether 2
        /// circles Intersects
        /// </summary>
        public void TestCirclesIntersects()
        {
            //create a few circles
            Circle circle1 = new Circle { Center = new Point(0,0), Radius = 2};
            Circle circle2 = new Circle { Center = new Point(0,0), Radius = 3};
            Circle circle3 = new Circle { Center = new Point(6, 0), Radius = 3 };
            Circle circle4 = new Circle { Center = new Point(1, 1), Radius = 3 };

            //non-Intersectsing circles
            Assert.IsFalse(circle1.Intersects(circle3));
            Assert.IsFalse(circle3.Intersects(circle1));
            Assert.IsFalse(circle1.Intersects(null));

            //touching circles
            Assert.IsTrue(circle2.Intersects(circle3));
            Assert.IsTrue(circle3.Intersects(circle2));

            //Intersectsing circles
            Assert.IsTrue(circle1.Intersects(circle2));
            Assert.IsTrue(circle2.Intersects(circle1));
            Assert.IsTrue(circle2.Intersects(circle4));
            Assert.IsTrue(circle4.Intersects(circle2));
            Assert.IsTrue(circle1.Intersects(circle4));
            Assert.IsTrue(circle4.Intersects(circle1));
            Assert.IsTrue(circle3.Intersects(circle4));
            Assert.IsTrue(circle4.Intersects(circle3));
        }
开发者ID:thethreadpool,项目名称:tinycodebits,代码行数:31,代码来源:CircleIntersectionTest.cs

示例2: CanStructureBePlaced

        public bool CanStructureBePlaced(Point location, int size, Unit builder, bool cutCorners)
        {
            List<PathNode> placingStructurePathNodes = new List<PathNode>();
            Circle collisionCircle = new Circle(new Vector2(location.X * Map.TileSize + (size / 2) * Map.TileSize, location.Y * Map.TileSize + (size / 2) * Map.TileSize), size * Map.TileSize);
            //placingStructureCenterPoint = collisionCircle.CenterPoint;

            for (int x = location.X; x < location.X + size; x++)
            {
                for (int y = location.Y; y < location.Y + size; y++)
                {
                    PathNode node = Rts.pathFinder.PathNodes[(int)MathHelper.Clamp(y, 0, Map.Height - 1), (int)MathHelper.Clamp(x, 0, Map.Width - 1)];
                    if (collisionCircle.Intersects(node.Tile))
                    {
                        placingStructurePathNodes.Add(node);
                    }
                }
            }
            // remove corners
            if (cutCorners)
            {
                placingStructurePathNodes.Remove(Rts.pathFinder.PathNodes[location.Y, location.X]);
                if (location.X + size <= Map.Width - 1)
                    placingStructurePathNodes.Remove(Rts.pathFinder.PathNodes[location.Y, location.X + size - 1]);
                else
                    return false;
                if (location.Y + size <= Map.Height - 1)
                    placingStructurePathNodes.Remove(Rts.pathFinder.PathNodes[location.Y + size - 1, location.X]);
                else
                    return false;
                placingStructurePathNodes.Remove(Rts.pathFinder.PathNodes[location.Y + size - 1, location.X + size - 1]);
            }

            foreach (PathNode node in placingStructurePathNodes)
            {
                if (!node.Tile.Walkable || node.Blocked)
                    return false;
                if (node.UnitsContained.Count > 0)
                {
                    if (node.UnitsContained.Count == 1 && node.UnitsContained.ElementAt<Unit>(0) == builder)
                        continue;
                    else
                    {
                        bool allow = true;

                        foreach (Unit unit in node.UnitsContained)
                        {
                            if (unit.Team != builder.Team)
                            {
                                allow = false;
                                break;
                            }
                        }
                        if (!allow)
                            return false;
                    }
                }
            }

            return true;
        }
开发者ID:nubington,项目名称:rts,代码行数:60,代码来源:PathFinderTools.cs

示例3: updatePlacingStructure

        void updatePlacingStructure()
        {
            if (!placingStructure)
                return;

            Vector2 mousePosition = new Vector2(mouseState.X, mouseState.Y);
            mousePosition = Vector2.Transform(mousePosition, Matrix.Invert(camera.get_transformation(worldViewport)));

            placingStructureLocation.X = (int)Math.Round(MathHelper.Clamp(mousePosition.X / map.TileSize - placingStructureType.Size / 2f, 0, map.Width - 1));
            placingStructureLocation.Y = (int)Math.Round(MathHelper.Clamp(mousePosition.Y / map.TileSize - placingStructureType.Size / 2f, 0, map.Height - 1));

            placingStructureCenterPoint.X = placingStructureLocation.X * map.TileSize + (placingStructureType.Size * map.TileSize) / 2;
            placingStructureCenterPoint.Y = placingStructureLocation.Y * map.TileSize + (placingStructureType.Size * map.TileSize) / 2;

            placingStructurePathNodes.Clear();
            placingStructureBlockedPathNodes.Clear();
            allowPlacingStructure = true;

            Circle collisionCircle = new Circle(new Vector2(placingStructureLocation.X * map.TileSize + (placingStructureType.Size / 2) * map.TileSize, placingStructureLocation.Y * map.TileSize + (placingStructureType.Size / 2) * map.TileSize), placingStructureType.Size * map.TileSize);
            //placingStructureCenterPoint = collisionCircle.CenterPoint;

            if (placingStructureType == StructureType.TownHall)
            {
                foreach (Resource resource in Resource.Resources)
                {
                    if (Vector2.Distance(collisionCircle.CenterPoint, resource.CenterPoint) < map.TileSize * 9)
                    {
                        allowPlacingStructure = false;
                        tooCloseToResource = true;
                    }
                }
            }
            else
                tooCloseToResource = false;

            for (int x = placingStructureLocation.X; x < placingStructureLocation.X + placingStructureType.Size; x++)
            {
                for (int y = placingStructureLocation.Y; y < placingStructureLocation.Y + placingStructureType.Size; y++)
                {
                    PathNode node = Rts.pathFinder.PathNodes[(int)MathHelper.Clamp(y, 0, map.Height - 1), (int)MathHelper.Clamp(x, 0, map.Width - 1)];
                    if (collisionCircle.Intersects(node.Tile))
                    {
                        placingStructurePathNodes.Add(node);
                    }
                }
            }

            // remove corners
            if (placingStructureType.CutCorners)
            {
                placingStructurePathNodes.Remove(Rts.pathFinder.PathNodes[placingStructureLocation.Y, placingStructureLocation.X]);
                if (placingStructureLocation.X + placingStructureType.Size <= map.Width - 1)
                    placingStructurePathNodes.Remove(Rts.pathFinder.PathNodes[placingStructureLocation.Y, placingStructureLocation.X + placingStructureType.Size - 1]);
                else
                    allowPlacingStructure = false;
                if (placingStructureLocation.Y + placingStructureType.Size <= map.Height - 1)
                    placingStructurePathNodes.Remove(Rts.pathFinder.PathNodes[placingStructureLocation.Y + placingStructureType.Size - 1, placingStructureLocation.X]);
                else
                    allowPlacingStructure = false;
                if (allowPlacingStructure)
                    placingStructurePathNodes.Remove(Rts.pathFinder.PathNodes[placingStructureLocation.Y + placingStructureType.Size - 1, placingStructureLocation.X + placingStructureType.Size - 1]);
            }

            for (int i = 0; i < placingStructurePathNodes.Count; )
            {
                PathNode node = placingStructurePathNodes[i];

                if (!node.Tile.Walkable || (node.Blocked && node.Blocker is Structure && ((Structure)node.Blocker).Visible) || (node.Blocked && node.Blocker is Resource))
                {
                    allowPlacingStructure = false;
                    placingStructurePathNodes.Remove(node);
                    placingStructureBlockedPathNodes.Add(node);
                }
                else
                    i++;
            }
        }
开发者ID:nubington,项目名称:rts,代码行数:77,代码来源:Rts+UI.cs

示例4: WillStructureFit

        public bool WillStructureFit(Point location, int size, bool cutCorners)
        {
            List<PathNode> placingStructurePathNodes = new List<PathNode>();
            Circle collisionCircle = new Circle(new Vector2(location.X * Map.TileSize + (size / 2) * Map.TileSize, location.Y * Map.TileSize + (size / 2) * Map.TileSize), size * Map.TileSize);
            //placingStructureCenterPoint = collisionCircle.CenterPoint;

            for (int x = location.X; x < location.X + size; x++)
            {
                for (int y = location.Y; y < location.Y + size; y++)
                {
                    PathNode node = Rts.pathFinder.PathNodes[(int)MathHelper.Clamp(y, 0, Map.Height - 1), (int)MathHelper.Clamp(x, 0, Map.Width - 1)];
                    if (collisionCircle.Intersects(node.Tile))
                    {
                        placingStructurePathNodes.Add(node);
                    }
                }
            }
            // remove corners
            if (cutCorners)
            {
                placingStructurePathNodes.Remove(Rts.pathFinder.PathNodes[location.Y, location.X]);
                if (location.X + size <= Map.Width - 1)
                    placingStructurePathNodes.Remove(Rts.pathFinder.PathNodes[location.Y, location.X + size - 1]);
                else
                    return false;
                if (location.Y + size <= Map.Height - 1)
                    placingStructurePathNodes.Remove(Rts.pathFinder.PathNodes[location.Y + size - 1, location.X]);
                else
                    return false;
                placingStructurePathNodes.Remove(Rts.pathFinder.PathNodes[location.Y + size - 1, location.X + size - 1]);
            }

            foreach (PathNode node in placingStructurePathNodes)
            {
                if (!node.Tile.Walkable || (node.Blocked && node.Blocker is Structure && ((Structure)node.Blocker).Visible) || (node.Blocked && node.Blocker is Resource))
                    return false;
            }

            return true;
        }
开发者ID:nubington,项目名称:rts,代码行数:40,代码来源:PathFinderTools.cs

示例5: GetNeighbors

        //Returns all the neighbors within a given circle
        public Buffer<GameObject> GetNeighbors(Circle c, Unit u)
        {
            neighborList.Clear();

            int xMin = (int)(c.Center.X - c.Radius);
            int xMax = (int)(c.Center.X + c.Radius);
            int yMin = (int)(c.Center.Y - c.Radius);
            int yMax = (int)(c.Center.Y + c.Radius);

            xMin = (int)Math.Max(xMin, 0f);
            yMin = (int)Math.Max(yMin, 0f);
            xMax = (int)Math.Min(xMax, width - 1);
            yMax = (int)Math.Min(yMax, height - 1);

            for (int i = xMin; i <= xMax; i++)
            {
                for (int j = yMin; j <= yMax; j++)
                {
                    for (int k = 0; k < objectMap[i, j].GetCount(); k++)
                    {
                        GameObject go = objectMap[i, j][k];
                        if (c.Intersects(go.GetBounds()) && !neighborList.Contains(go))
                        {
                            if (u == null)
                            {
                                neighborList.Add(go);
                            }
                            else if (!u.Equals(go))
                            {
                                neighborList.Add(go);
                            }
                        }
                    }
                }
            }

            return neighborList;
        }
开发者ID:bschwind,项目名称:AI-Example,代码行数:39,代码来源:Map.cs

示例6: Intersects

 /// <summary>
 /// Determines if Vector2 position is inside or on the edge of a circle.
 /// </summary>
 /// <param name="vector">Vector2 instance to check.</param>
 /// <param name="circle">Circle instance to check.</param>
 /// <returns>True if the Vector2 position is completely inside or along the edge of the target circle, false if not.</returns>
 public static bool Intersects(this Vector2 vector, Circle circle)
 {
     return circle.Intersects(vector);
 }
开发者ID:bigangryguy,项目名称:BrassKnuckles,代码行数:10,代码来源:Vector2Extension.cs

示例7: GetObjectCountInCircle

        public int GetObjectCountInCircle(Circle c)
        {
            int count = 0;

            int radius = (int)c.Radius;
            int centerXCoord = (int)c.Center.X;
            int centerYCoord = (int)c.Center.Y;
            int xMin = centerXCoord - radius;
            int xMax = centerXCoord + radius;
            int yMin = centerYCoord - radius;
            int yMax = centerYCoord + radius;

            xMin = (int)Math.Max(xMin, 0);
            yMin = (int)Math.Max(yMin, 0);
            xMax = (int)Math.Min(xMax, width);
            yMax = (int)Math.Min(yMax, height);

            for (int i = xMin; i < xMax; i++)
            {
                for (int j = yMin; j < yMax; j++)
                {
                    for (int k = 0; k < objectMap[i, j].GetCount(); k++)
                    {
                        if (c.Intersects(objectMap[i, j][k].GetBounds()))
                        {
                            count++;
                        }
                    }
                }
            }

            return count;
        }
开发者ID:bschwind,项目名称:AI-Example,代码行数:33,代码来源:Map.cs

示例8: FindSelectedVertex

        private void FindSelectedVertex(Point mousePos)
        {
            if (_editState != EditState.Default)
            {
                return;
            }
            if (_selectedPoly == null)
            {
                _selectedVert = -1;
                return;
            }

            for (int i = 0; i < _selectedPoly.Vertices.Count; i++)
            {
                Circle circle = new Circle(_selectedPoly.Vertices[i].X, _selectedPoly.Vertices[i].Y, 15);
                if (circle.Intersects(mousePos))
                {
                    _selectedVert = i;
                    return;
                }
            }
            _selectedVert = -1;
        }
开发者ID:iq110,项目名称:csharpgameprogramming,代码行数:23,代码来源:ConvexPolyDrawerState.cs

示例9: distanceThresholdReached

        private bool distanceThresholdReached(int distance)
        {
            Circle threshold = new Circle(Ship.WorldCenter, distance);

            if (threshold.Intersects(Player.Ship.BoundingCircle))
                return true;
            else
                return false;
        }
开发者ID:JEJacobi,项目名称:AsteroidsInc,代码行数:9,代码来源:NPC.cs

示例10: CircleRectangleCollision

 public static bool CircleRectangleCollision(Circle circle, PhysicalRectangle rectangle)
 {
     return circle.Intersects(rectangle);
 }
开发者ID:jodigiordano,项目名称:commander,代码行数:4,代码来源:Collisions.cs

示例11: PointCircleCollision

 public static bool PointCircleCollision(ref Vector3 point, Circle circle)
 {
     return circle.Intersects(ref point);
 }
开发者ID:jodigiordano,项目名称:commander,代码行数:4,代码来源:Collisions.cs

示例12: CircleCircleCollision

 public static bool CircleCircleCollision(Circle circle1, Circle circle2)
 {
     return circle1.Intersects(circle2);
 }
开发者ID:jodigiordano,项目名称:commander,代码行数:4,代码来源:Collisions.cs


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