写在前面:最近在做控制人物在地图上行走寻路时遇到了这样的问题,延伸出:1判断点在多边形内 ,2多边形内随机产生一点 ,3多边形外一点到该多边形最近点的坐标。参考网上,慢慢整理一下。都是实测过,用在自己项目里的代码。不定时更新。
下面是:判断点是否在多边形内
方法一:射线法
思路:
1,以测试点向右或左向无穷点左射线,若射线与多边形交点个数是奇数个,则点在内部;若交点个数是偶数个,则点在外部;(这里使用左无穷点)
2,若是凸多边形,条件1完全正确,若是凹多边形,则需要多考虑几种特殊情况
代码如下:(凹凸多边形都可以)
function UIUtil:bPointInPolygen(posList, posTarget) -- posList:多边形顶点坐标(按照顺时针或逆时针排序), posTarget:要判断点的坐标
local polygenSides = #posList -- 多边形边数
local flag = 0 -- 与多边形交点个数
for i = 1, polygenSides do
local Xa, Ya = posList[i].x, posList[i].y -- 首坐标
local Xb, Yb = posList[i].x, posList[i].y -- 尾坐标
local Xp, Yp = posTarget.x, posTarget.y -- 目标坐标
if posList[i + 1] then
Xb