.Net判断点在三角形内部的问题

简介: class CalcArea { //点 public class Point { private double x; pr...



    class CalcArea
    {
        //点
        public class Point
        {
            private double x;
            private double y;

            public Point(double a, double b)
            {
                x = a;
                y = b;
            }
            public double getX()
            {
                return x;
            }
            public double getY()
            {
                return y;
            }

            public void setX(double a)
            {
                x = a;
            }
            public void setY(double b)
            {
                y = b;
            }
        }

        //边
        public class Line
        {
            private Point p1;
            private Point p2;

            public Line(Point x, Point y)
            {
                p1 = x;
                p2 = y;
            }
            public Point getP1()
            {
                return p1;
            }
            public Point getP2()
            {
                return p2;
            }

            public void setP1(Point x)
            {
                p1 = x;
            }
            public void setP2(Point x)
            {
                p2 = x;
            }
        }

        //三角形
        public class Triangle
        {
            private Point p1;
            private Point p2;
            private Point p3;

            public Triangle(Point a, Point b, Point c)
            {
                p1 = a;
                p2 = b;
                p3 = c;
            }

            public Point getP1()
            {
                return p1;
            }
            public Point getP2()
            {
                return p2;
            }
            public Point getP3()
            {
                return p3;
            }
            public void setP1(Point x)
            {
                p1 = x;
            }
            public void setP2(Point x)
            {
                p2 = x;
            }
            public void setP3(Point x)
            {
                p3 = x;
            }
        }

        //计算三角形面积
        public class Util
        {
            //计算两点间距离
            public static double dispp(Point p1, Point p2)
            {
                double distX = p1.getX() - p2.getX();
                double distY = p1.getY() - p2.getY();
                return Math.Sqrt(distX * distX + distY * distY);

            }

            //点到直线的距离
            public static double displ(Point p, Line l)
            {

                double lx1 = l.getP1().getX();
                double lx2 = l.getP2().getX();
                double ly1 = l.getP1().getY();
                double ly2 = l.getP2().getY();
                double k = (ly2 - ly1) / (lx2 - lx1);
                double b = ly1 - k * lx1;
                return Math.Abs((p.getY() - k * p.getX() - b)) / Math.Sqrt((k * k + 1));

            }

            //计算面积
            public static double triArea(Triangle t)
            {

                Line l = new Line(t.getP1(), t.getP2());
                return Util.dispp(t.getP1(), t.getP2()) * Util.displ(t.getP3(), l) / 2;

            }


            //向量方法计算
            public static double triArea1(Triangle t)
            {
                double area = 0;
                double a = Util.dispp(t.getP1(), t.getP2());
                double b = Util.dispp(t.getP2(), t.getP3());
                double c = Util.dispp(t.getP1(), t.getP3());
                double d = (a + b + c) / 2;
                area = Math.Sqrt(d * (d - a) * (d - b) * (d - c));
                return area;
            }

        }
    }

        #region testTriangle
        /// <summary>
        /// 计算点在不在三角形内部
        /// </summary>
        private void testTriangle()
        {
            CalcArea.Point p1 = new CalcArea.Point(-1, 1);
            CalcArea.Point p2 = new CalcArea.Point(1, 0.5);
            CalcArea.Point p3 = new CalcArea.Point(2, -3);


            double x = 0.8;

            double y = 0.3;

            CalcArea.Point p4 = new CalcArea.Point(x, y);


            CalcArea.Triangle t;

            t = new CalcArea.Triangle(p1, p2, p3);
            double sourceArea = Convert.ToDouble(CalcArea.Util.triArea(t));

            t = new CalcArea.Triangle(p1, p2, p4);
            double area1 = Convert.ToDouble(CalcArea.Util.triArea1(t));

            t = new CalcArea.Triangle(p3, p2, p4);
            double area2 = Convert.ToDouble(CalcArea.Util.triArea1(t));

            t = new CalcArea.Triangle(p1, p3, p4);
            double area3 = Convert.ToDouble(CalcArea.Util.triArea1(t));

            if (sourceArea == (double)((int)((area1 + area2 + area3) * 100)) / 100)
            {
                Console.WriteLine("点在三角形内部!");
            }
            else
            {
                Console.WriteLine("点不在三角形内部!");
            }

            Console.ReadLine();
        } 
        #endregion



相关文章
|
机器学习/深度学习 监控 安全
网络安全产品之认识入侵防御系统
由于网络安全威胁的不断演变和增长。随着网络技术的不断发展和普及,网络攻击的种类和数量也在不断增加,给企业和个人带来了巨大的安全风险。传统的防火墙、入侵检测防护体系等安全产品在面对这些威胁时,存在一定的局限性和不足,无法满足当前网络安全的需求。入侵防御系统(IPS)作为一种主动防御的解决方案应运而生。它可以实时检测和防御网络流量中的恶意攻击和威胁,通过串接的方式部署在网络中,对入侵行为进行实时阻断,从而极大地降低了入侵的危害。
894 1
|
存储 人工智能 大数据
云计算的详细介绍
云计算的详细介绍
2400 1
|
机器学习/深度学习 人工智能 Unix
《人工智能技术与应用》试题与练习(2)
《人工智能技术与应用》试题与练习(2)
337 0
|
小程序 Java 关系型数据库
基于SpringBoot招聘管理系统设计和实现(源码+LW+调试文档+讲解等)
基于SpringBoot招聘管理系统设计和实现(源码+LW+调试文档+讲解等)
|
开发工具 vr&ar 图形学
PicoVR Unity SDK⭐️四、基础传送方式详解
PicoVR Unity SDK⭐️四、基础传送方式详解
|
域名解析
Discuz如何给 门户、论坛、手机等,设置二级域名
Discuz如何给 门户、论坛、手机等,设置二级域名
480 1
|
开发工具 git Python
安装和使用`libnum`是一个用于数字理论函数的Python库
【6月更文挑战第19天】`libnum`是Python的数字理论函数库。安装可通过`git clone`,进入目录后运行`python setup.py install`,也可用`pip install libnum`。示例:使用`int_to_hex`将十进制数42转换为十六进制字符串&#39;2a&#39;。注意,信息可能已过时,应查最新文档以确保准确性。如遇问题,参考GitHub仓库或寻求社区帮助。
338 1
|
算法 网络架构
计算机网络:点对点协议PPP
计算机网络:点对点协议PPP
470 0
|
机器学习/深度学习 算法 PyTorch
机器学习之PyTorch和Scikit-Learn第6章 学习模型评估和超参数调优的最佳实践Part 2
本节中,我们来看两个非常简单但强大的诊断工具,可帮助我们提升学习算法的性能:学习曲线和验证曲线,在接下的小节中,我们会讨论如何使用学习曲线诊断学习算法是否有过拟合(高方差)或欠拟合(高偏置)的问题。另外,我们还会学习验证曲线,它辅助我们处理学习算法中的常见问题。
641 0
机器学习之PyTorch和Scikit-Learn第6章 学习模型评估和超参数调优的最佳实践Part 2
|
Java 关系型数据库 数据库
如何使用 PolarDB-X
《PolarDB-X 动手实践》系列第二期,本场景带您体验如何基于PolarDB-X进行应用开发。