• 求两条线段的交点


           /// <summary>
            /// 求两条线段的交点
            /// </summary>
            /// <param name="x1"></param>
            /// <param name="y1"></param>
            /// <param name="x2"></param>
            /// <param name="y2"></param>
            /// <param name="x3"></param>
            /// <param name="y3"></param>
            /// <param name="x4"></param>
            /// <param name="y4"></param>
            /// <param name="point"></param>
            /// <returns></returns>
            public bool GetSegInter(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4, ref Point2d point)
            {
                double A1 = y2 - y1;
                double B1 = x1 - x2;
                double C1 = -A1 * x1 - B1 * y1;
                double A2 = y4 - y3;
                double B2 = x3 - x4;
                double C2 = -A2 * x3 - B2 * y3;
                double dlt = A1 * B2 - A2 * B1;
                double dltx = C1 * B2 - C2 * B1;
                double dlty = A1 * C2 - A2 * C1;
                if (Math.Abs(dlt) < 0.00000001)
                {
                    return false;
                }
                else
                {
                    point = new Point2d(-1.0 * (dltx / dlt), -1.0 * (dlty / dlt));
                    bool bResInPoly = IsPointInLine(new Point2d(x1, y1), new Point2d(x2, y2), point);
                    bool bResInTile = IsPointInLine(new Point2d(x3, y3), new Point2d(x4, y4), point);
    
                    return bResInPoly && bResInTile;
                }
            }
    
            public bool IsPointInLine(Point2d a, Point2d b, Point2d c, double bAllowGap = 0.01)
            {
                double lac = Math.Sqrt((a.X - c.X) * (a.X - c.X) + (a.Y - c.Y) * (a.Y - c.Y));
                double lbc = Math.Sqrt((b.X - c.X) * (b.X - c.X) + (b.Y - c.Y) * (b.Y - c.Y));
                double lab = Math.Sqrt((a.X - b.X) * (a.X - b.X) + (a.Y - b.Y) * (a.Y - b.Y));
                return (lac + lbc < lab + bAllowGap) ? true : false;
            }
  • 相关阅读:
    luogu_1168: 中位数
    luogu_4762: [CERC2014]Virus synthesis
    luogu_4287:双倍回文
    回文自动机学习笔记
    luogu_3645: 雅加达的摩天楼
    python爬今日头条(ajax分析)
    Python多进程multiprocessing.Pool()
    Python爬微博(ajax+mongo)
    python实用函数之join()
    python之tuple与list
  • 原文地址:https://www.cnblogs.com/autumoonchina/p/4341954.html
Copyright © 2020-2023  润新知