天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 70|回复: 0

判断点是否在有序的点组成的多边形内的算法(C++版本)

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
float  min1(float a, float b) {

        if (a > b) {
                return b;
        }
        else {
                return a;
        }
}

float  max1(float a, float b) {

        if (a < b) {
                return b;
        }
        else {
                return a;
        }
}

bool PtInPolygon(FVector2D p, TArray<FVector2D> ptPolygon)
{
        int nCross = 0;
        int nCount = ptPolygon.Num();
        for (int i = 0; i < nCount; i++)
        {
                FVector2D p1 = ptPolygon[i];
                FVector2D p2 = ptPolygon[(i + 1) % nCount];

                // 求解 y=p.y 与 p1p2 的交点

                if (p1.Y == p2.Y) // p1p2 与 y=p0.y平行
                        continue;

                if (p.Y < min1(p1.Y, p2.Y)) // 交点在p1p2延长线上
                        continue;

                if (p.Y >= max1(p1.Y, p2.Y)) // 交点在p1p2延长线上
                        continue;

                // 求交点的 X 坐标 --------------------------------------------------------------
                double x = (double)(p.Y - p1.Y) * (double)(p2.X - p1.X) / (double)(p2.Y - p1.Y) + p1.X;

                if (x > p.X)
                        nCross++; // 只统计单边交点
        }

        // 单边交点为偶数,点在多边形之外 ---
        return (nCross % 2 == 1);
}

 

 

 

 

判断点是否在有序的点组成的多边形内的算法(C++版本)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 11:40 , Processed in 0.190079 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表