当前位置: 首页 > wzjs >正文

宜昌便宜做网站什么是软文写作

宜昌便宜做网站,什么是软文写作,网页做成软件,百度知道官网登录入口1、向量叉乘法 2、射线法原理 射线法是判断点与多边形位置关系的经典算法,核心思想是: 从目标点发出一条水平向右的射线(数学上可视为 y p_y, x \geq p_x 的射线),统计该射线与多边形边的交点数量: - 偶…

1、向量叉乘法

2、射线法原理

 

射线法是判断点与多边形位置关系的经典算法,核心思想是:

从目标点发出一条水平向右的射线(数学上可视为 y = p_y, x \geq p_x 的射线),统计该射线与多边形边的交点数量:

 

- 偶数次(含0次)相交:点在多边形外部

 

- 奇数次相交:点在多边形内部

 

- 点在边上:直接判定为内部或边界(根据需求处理)

 

关键边界处理

 

1. 边为水平线段( y_1 = y_2 = p_y ):

射线与边重合,若点在边上则直接判定为边界,否则忽略(不计数)。

 

2. 点正好是多边形顶点:

若顶点的两个相邻边分别在射线上下两侧,则计为1次交点;否则不计(避免重复计数)。

 

3. 射线经过边的顶点(非目标点):

仅当该顶点是边的“下端点”(即另一顶点 y > p_y )时,计为1次交点(采用“左闭右开”规则避免重复)。

 

CAD环境下的实现(基于AutoCAD API)

 

假设使用 Autodesk.AutoCAD.DatabaseServices 中的  Polyline  和  Point3d  类型,且所有点的 Z=0 (XY平面)。

using Autodesk.AutoCAD.DatabaseServices;

using Autodesk.AutoCAD.Geometry;

using System;

 

public static class PointInPolylineChecker

{

    /// <summary>

    /// 射线法判断点是否在闭合Polyline内部(处理直线段,忽略凸度/圆弧,如需处理圆弧需额外交点计算)

    /// </summary>

    /// <param name="point">目标点(Z=0)</param>

    /// <param name="polyline">闭合Polyline(顶点按顺序排列,需闭合,最后一点可与第一点重复)</param>

    /// <param name="includeBoundary">是否包含边界(点在边上时返回true)</param>

    /// <returns>true=内部或边界,false=外部</returns>

    public static bool IsPointInside(Point3d point, Polyline polyline, bool includeBoundary = true)

    {

        double px = point.X;

        double py = point.Y;

        int vertexCount = polyline.NumberOfVertices;

        int intersectionCount = 0;

 

        for (int i = 0; i < vertexCount; i++)

        {

            // 获取当前边的两个端点(闭合,最后一个顶点连接到第一个顶点)

            Point3d p1 = polyline.GetPoint3dAt(i);

            Point3d p2 = polyline.GetPoint3dAt((i + 1) % vertexCount);

 

            // 处理点在边上的情况(优先判断边界)

            if (includeBoundary && IsPointOnSegment(point, p1, p2))

                return true;

 

            double y1 = p1.Y;

            double y2 = p2.Y;

 

            // 边为水平线段(与射线共线),跳过(不计入交点)

            if (Math.Abs(y1 - py) < 1e-8 && Math.Abs(y2 - py) < 1e-8)

                continue;

 

            // 边的两个端点都在射线下方或上方,不相交

            if ((y1 < py - 1e-8 && y2 < py - 1e-8) || (y1 > py + 1e-8 && y2 > py + 1e-8))

                continue;

 

            // 计算交点的x坐标(射线为y=py,x≥px)

            double xIntersect;

            double dx = p2.X - p1.X;

            double dy = p2.Y - p1.Y;

 

            // 处理垂直边(避免除零)

            if (Math.Abs(dy) < 1e-8)

                continue; // 已处理水平边,此处为垂直边但y不相等,不可能与射线相交

 

            double t = (py - y1) / dy; // 参数t∈[0,1]表示交点在边上的位置

            xIntersect = p1.X + t * dx;

 

            // 交点必须在射线右侧(xIntersect ≥ px - 1e-8,允许微小误差)且在边的范围内(t∈[0,1])

            if (xIntersect >= px - 1e-8 && t >= -1e-8 && t <= 1 + 1e-8)

            {

                // 处理射线经过顶点的情况(左闭右开规则:仅当顶点是边的“下端点”时计数)

                if ((y1 < py + 1e-8 && y2 >= py + 1e-8) || (y2 < py + 1e-8 && y1 >= py + 1e-8))

                {

                    // 排除顶点在射线上且相邻边同向的情况(避免重复计数)

                    if (!(Math.Abs(y1 - py) < 1e-8 && Math.Abs(y2 - py) < 1e-8))

                        intersectionCount++;

                }

            }

        }

 

        // 奇数次相交则在内部,边界情况已提前处理

        return intersectionCount % 2 == 1;

    }

 

    /// <summary>

    /// 判断点是否在线段上(包含端点,允许1e-8精度误差)

    /// </summary>

    private static bool IsPointOnSegment(Point3d point, Point3d p1, Point3d p2)

    {

        double cross = (point.X - p1.X) * (p2.Y - p1.Y) - (point.Y - p1.Y) * (p2.X - p1.X);

        if (Math.Abs(cross) > 1e-8) return false; // 点不在直线上

 

        double minX = Math.Min(p1.X, p2.X) - 1e-8;

        double maxX = Math.Max(p1.X, p2.X) + 1e-8;

        double minY = Math.Min(p1.Y, p2.Y) - 1e-8;

        double maxY = Math.Max(p1.Y, p2.Y) + 1e-8;

 

        return point.X >= minX && point.X <= maxX && point.Y >= minY && point.Y <= maxY;

    }

}

http://www.dtcms.com/wzjs/123764.html

相关文章:

  • 南京优质网站建设方案推广优化seo
  • 网站建设公司画册大数据免费查询平台
  • 国内的外贸b2c网站体验式营销案例
  • 微网站怎么注册账号国产最好的a级suv
  • 网络工程规划与设计金昌网站seo
  • 做中学网站太原做推广营销
  • 深圳做网站做app品牌营销包括哪些内容
  • 腾讯云自助建站营销型网站建设题库
  • 做西餐的网站网站优化网
  • 最全的数据网站深圳推广网络
  • 做美缝在哪个网站接单宁波如何做抖音seo搜索优化
  • 网站开发设计流程文档阿里云com域名注册
  • 揭阳网站建设模板网店代运营需要多少钱
  • 如何开设网站成都网络推广
  • 温州营销推广公司重庆百度推广seo
  • 网站推他网站seo网站排名
  • 网站建设公司如何生存seo网站优化方案书
  • 阿里云域名解析seo课程总结怎么写
  • 北海网站建设公司站长工具seo
  • 电商网站开发的现状网络营销的概念
  • 网站开发下载功能如何实现福州seo推广公司
  • 找建站公司做网站注意事项百度搜索引擎优化的推广计划
  • 为女朋友做的表白网站网站开发教程
  • 在线网站你们会回来感谢我的crm系统成功案例分享ppt
  • 网站信息内容建设 宣传部门网站如何优化关键词排名
  • 中国住房和城乡建设部网站网络培训总结
  • 河南工程招标网站线下推广有哪几种渠道
  • 做it的兼职网站有哪些百度搜索推广开户
  • 高州做网站手机网站建设价格
  • 做软件与做网站建设有什么区别网上推广平台有哪些