久久国产精品国产精品_强行挺进朋友漂亮人妻身体_免费在线观看一级片_男女视频91_久久毛毛片_久久96国产精品久久久

技術支持 / 技術論壇 / 二次開發 / 【技術分享】【C#】凸包算法
【技術分享】【C#】凸包算法
freeter
帖子
1
精華
0
積分
12
二次開發 技術分享

一、參考鏈接:點擊鏈接

二、實現代碼:

注:傳進去的點集坐標是要相對于所在平面坐標,不符合條件需要轉換。

        /// <summary>
        /// Graham掃描法主函數
        /// </summary>
        /// <param name="points"></param>
        /// <returns></returns>
        internal static List<Point3> GrahamScan(List<Point3> points)
        {
            // 如果點的個數小于等于2,直接返回所有點
            if (points.Count <= 2)
                return points;

            List<Point3> convexHull = new List<Point3>();

            // 1. 找到包含所有點中最下方的點,并將其放在列表的第一個位置
            Point3 lowestPoint = FindLowestPoint(points);
            points.Remove(lowestPoint);
            convexHull.Add(lowestPoint);

            // 2. 根據極角對其它點進行排序
            points.Sort((p1, p2) =>
            {
                double angle1 = GetPolarAngle(lowestPoint, p1);
                double angle2 = GetPolarAngle(lowestPoint, p2);
                return angle1.CompareTo(angle2);
            });

            // 3. 構建凸包
            convexHull.Add(points[0]);
            for (int i = 1; i < points.Count; i++)
            {
                while (convexHull.Count >= 2 && !IsCounterClockwise(convexHull[convexHull.Count - 2], convexHull[convexHull.Count - 1], points[i]))
                {

                    convexHull.RemoveAt(convexHull.Count - 1);
                }
                convexHull.Add(points[i]);
            }
            return convexHull;
        }
        /// <summary>
        /// 使用極角排序,輔助函數:計算極角
        /// </summary>
        /// <param name="p1"></param>
        /// <param name="p2"></param>
        /// <returns></returns>
        protected static  double GetPolarAngle(Point3 p1, Point3 p2)
        {
            double deltaX = p2.X - p1.X;
            double deltaY = p2.Y - p1.Y;
            return Math.Atan2(deltaY, deltaX);
        }

        /// <summary>
        /// 使用極角排序,輔助函數:判斷點p3是否在p1和p2的逆時針方向
        /// </summary>
        /// <param name="p1"></param>
        /// <param name="p2"></param>
        /// <param name="p3"></param>
        /// <returns></returns>
        protected static bool IsCounterClockwise(Point3 p1, Point3 p2, Point3 p3)
        {
            double crossProduct = (p2.X - p1.X) * (p3.Y - p1.Y) - (p2.Y - p1.Y) * (p3.X - p1.X);
            return crossProduct > 0;
        }

        /// <summary>
        /// 尋找包含所有點中最下方的點
        /// </summary>
        /// <param name="points"></param>
        /// <returns></returns>
        protected static Point3 FindLowestPoint(List<Point3> points)
        {
            Point3 lowest = points[0];
            foreach (var point in points)
            {
                if (point.Y < lowest.Y || (point.Y == lowest.Y && point.X < lowest.X))
                    lowest = point;
            }
            return lowest;
        }

三、效果圖

844 0 2024-01-05 18:03:42
暫時還沒有回復評論

回復加入討論

回復
請選擇移動至版塊:
確認移動
主站蜘蛛池模板: 亚洲国产人在线播放首页 | 日韩欧美一区2区3区 | 久久精品aⅴ无码中文字字幕不卡 | 亚洲免费视频免在线观看 | 精品成在人线AV无码免费看 | 无码中文精品专区一区二区 | 波多野结衣在线观看一区二区 | 奇米影视第四色成人网 | 最新二区三区av | 亚洲精品无码久久千人斩 | 窝窝午夜看片 | 国产亚洲精品久久久999蜜臀 | 免费精品无码AV片在线观看 | 欧美另类人妖 | 国产美熟女乱又伦av果冻传媒 | 亚洲AV无码片一区二区三区 | 国产成人A人亚洲精品无码 日本免费a∨片免费 | gogogo免费高清在线 | 国产精品爽爽久久久久久竹菊 | 日本一卡2卡三卡4卡无卡免费网站 | 精品国产一区二区三区性色av | 成人区人妻精品一区二区不卡 | 精品三级AV无码一区 | YY6080午夜福利无码理论 | 夜色福利院在线观看免费 | 国产欧美久久久精品影院 | 97人妻人人揉人人躁人人 | 欧美精品一区二区精品久久 | 国产麻豆老师在线观看 | 国产精品鲁鲁鲁 | 欧美人与动牲交视频在线观看 | 精品无码国产自产在线观看水浒传 | 亚洲色婷婷综合开心网 | 免费观看又污又黄的网站 | 免费国产乱理伦片在线观看 | 中文字幕 日韩 欧美 | 欧美成人精品三级一二三在线观看 | 中文字幕最新 | 国内精品卡1卡2卡区别 | 亚洲精品久久夜色撩人男男小说 | 69堂人成无码免费视频果冻传媒 |