国产最猛黑人xxxxx猛交_91国产丝袜播放在线_真人毛片高清免费播放_ass老女人pjcsxxxx_免费观看成人鲁鲁鲁鲁鲁视频_免费成人动漫

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

一、參考鏈接:點(diǎn)擊鏈接

二、實(shí)現(xiàn)代碼:

注:傳進(jìn)去的點(diǎn)集坐標(biāo)是要相對(duì)于所在平面坐標(biāo),不符合條件需要轉(zhuǎn)換。

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

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

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

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

            // 3. 構(gòu)建凸包
            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>
        /// 使用極角排序,輔助函數(shù):計(jì)算極角
        /// </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>
        /// 使用極角排序,輔助函數(shù):判斷點(diǎn)p3是否在p1和p2的逆時(shí)針方向
        /// </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>
        /// 尋找包含所有點(diǎn)中最下方的點(diǎn)
        /// </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;
        }

三、效果圖

916 0 2024-01-05 18:03:42
暫時(shí)還沒有回復(fù)評(píng)論

回復(fù)加入討論

回復(fù)
請(qǐng)選擇移動(dòng)至版塊:
確認(rèn)移動(dòng)
主站蜘蛛池模板: 噼里啪啦国语在线观看第驰 | 国内免费久久久久久久久 | 天堂亚洲一品 | 一区二区福利电影 | 国产一级啪啪 | 在线中文字幕-区二区三区四区 | javlibrary贴吧 | 99久久精品免费看国产小宝寻花 | 亚洲香蕉视频综合在线 | 91香草视频 | 人与善性猛交ⅹ另类0oooo | 咪咪色在线视频 | "性 国产三级在线观看" | 少妇精品久久久久www蜜月 | 天天色伊人 | 亚洲欧美丝袜精品久久中文字幕 | 女警一级毛片免费视频观看 | 最近中文字幕高清字幕在线视频 | 欧美三级精品三区四区 | 国产一区日本 | 国产精品一区二区三区在线 | 免费毛片在线播放免费 | 国产三区四区在线观看 | 熟妇好紧好大快点舒服使劲xh | 日韩精品专区在线影院重磅 | 亚洲午夜久久久久久久久久 | 五码亚洲 | 日韩精品无码一区二区三区免费 | 中国黄色一级 | 国产黄a一级 | 91精品国产色综合久久不卡98 | 精品黑人一区二区三区久久 | 天堂在线中文在线 | 国产精品日日摸夜夜添夜夜av | 日本精品无码一区二区三区久久久 | zooz狗xxx| 精品久久91 | 欧美成一级 | gogogo影视免费播放mv | 秋霞偷拍 | 国产视频在线观看一区二区三区 |