社区
语言基础/算法/系统设计
帖子详情
如何判断点是否在一个不规则的多边形区域内?
dyzhao889
2008-12-14 07:28:46
请教不使用API CreatePolygonRgn和PtInRegion 方法
如何判断点是否在一个不规则的多边形区域内?
例如判断(x:973763,y:144393)点是否在由
(964826, 140636), (982918, 136537), (990120, 144293), (966908, 151285)
四个顶点组成的不规则多边行区域内呢?
在线等...
小弟在此先谢谢了!
...全文
913
16
打赏
收藏
如何判断点是否在一个不规则的多边形区域内?
请教不使用API CreatePolygonRgn和PtInRegion 方法 如何判断点是否在一个不规则的多边形区域内? 例如判断(x:973763,y:144393)点是否在由 (964826, 140636), (982918, 136537), (990120, 144293), (966908, 151285) 四个顶点组成的不规则多边行区域内呢? 在线等... 小弟在此先谢谢了!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
饭瘾
2011-03-08
打赏
举报
回复
MTK中的判断
饭瘾
2011-03-08
打赏
举报
回复
MMI_BOOL mmi_pen_check_inside_polygon(mmi_pen_polygon_area_struct *polygon, mmi_pen_point_struct pos)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
MMI_BOOL c = MMI_FALSE;
S16 i, j;
S16 nPoints = polygon->num;
mmi_pen_point_struct *outline = polygon->points;
S16 x = pos.x;
S16 y = pos.y;
for (i = 0, j = nPoints - 1; i < nPoints; j = i++)
{
mmi_pen_point_struct *a = &outline[i];
mmi_pen_point_struct *b = &outline[j];
if (((a->y <= y && y < b->y) || (b->y <= y && y < a->y)) &&
(x < (b->x - a->x) * (y - a->y) / (b->y - a->y) + a->x))
{
c = !c;
}
}
return c;
}
dyzhao889
2008-12-16
打赏
举报
回复
楼上的大哥,能否说清楚点?能否给个地址?谢谢
ZuoBaoquan
2008-12-16
打赏
举报
回复
换个思路,你看看GDI+。里面有个“区域”(可以是任何形状),它提供了一个方法可以直接判断某个点是不是在里面。
dyzhao889
2008-12-15
打赏
举报
回复
没有大哥会的吗?自己UP
dyzhao889
2008-12-15
打赏
举报
回复
谢谢楼上的两位大哥,那个顶点数(即边数)是可变的,是不确定的
就像我找到的那个VC的函数,顶点数是一个可变的数组,肯定有方法的,网前辈指点...
woniugongzuoshi
2008-12-15
打赏
举报
回复
类似龙人说的,转换成高数中的函数问题
icerainy
2008-12-15
打赏
举报
回复
首先你没确定你的不规则多边形是多少条边,这样的话算法写起来比较麻烦
实际算法无非就是几条直线的算法 在直线上恻还是下侧,例如 直线是 y=x+1 那么 y>x+1 则在直线上 y<x+1 在直线下
我也不愿意写,提供个思路,如果要求不是特别精确的话近似处理成个圆 坐起来就简单了
最多判断N次 N=边数
dyzhao889
2008-12-14
打赏
举报
回复
哪位大哥来帮帮忙呀...
dyzhao889
2008-12-14
打赏
举报
回复
哪位大哥来帮帮小弟呀!
qap22
2008-12-14
打赏
举报
回复
不懂,up
dyzhao889
2008-12-14
打赏
举报
回复
本人找到一段VC 的代码,懂VC的可以借鉴下或帮小弟翻译成为delphi,谢谢!
bool IsPtInArea(AcGePoint3d pt, AcGePoint3dArray& pt3dArr)
{
int iLen = pt3dArr.length();
if (iLen < 3)
return false;
// 首先构造最小包络面并得到最大 x 坐标
int i;
double dblMaxX = pt3dArr[0].x;
double dblMinX = pt3dArr[0].x;
double dblMaxY = pt3dArr[0].y;
double dblMinY = pt3dArr[0].y;
for (i = 1; i < iLen; i++)
{
if (pt3dArr[i].x > dblMaxX)
dblMaxX = pt3dArr[i].x;
if (pt3dArr[i].x < dblMinX)
dblMinX = pt3dArr[i].x;
if (pt3dArr[i].y > dblMaxY)
dblMaxY = pt3dArr[i].y;
if (pt3dArr[i].y < dblMinY)
dblMinY = pt3dArr[i].y;
}
// 如果点位于最小包络面之外,则肯定不在区域内,直接返回 false
if (( pt.x > dblMaxX) ||
( pt.x < dblMinX) ||
( pt.y > dblMaxY) ||
( pt.y < dblMinY)
)
return false;
// 循环求取交点
pt.z = 0.0;
AcGePoint3d xpt, ipt;
xpt = pt;
xpt.x = dblMaxX + 10.0;
//xpt.x = 1.7e208;
AcGeLineSeg3d lineseg3d(pt, xpt);
AcGePoint3d p1 = pt3dArr.first();
p1.z = 0.0;
bool bAdd = false;
if (!pt3dArr[iLen - 1].isEqualTo(p1)){
pt3dArr.append(p1);
iLen++;
bAdd = true;
}
AcGePoint3d p2;
int nCount = 0;
for (i=1; i < iLen; i++)
{
p2 = pt3dArr[i];
p2.z = 0.0;
// 如果所给点与顶点相等,直接返回
if (pt.isEqualTo(p1))
{
if (bAdd)
pt3dArr.removeLast();
return true;
}
AcGeLineSeg3d xlineseg3d(p1, p2);
// 如果所给点在某一条边上,直接返回
if (xlineseg3d.isOn(pt) == Adesk::kTrue)
{
if (bAdd)
pt3dArr.removeLast();
return true;
}
// 如果构造线段与交点存在,加入交点表
if (lineseg3d.intersectWith(xlineseg3d, ipt) == Adesk::kTrue)
{
//bool bAdd = true;
// 如果交点正好为顶点,判断另外的端点在哪一侧
if (ipt.isEqualTo(p1))
{
if (p2.y > ipt.y)
nCount++;
}
else if(ipt.isEqualTo(p2))
{
if (p1.y > ipt.y)
nCount++;
}
else
nCount++;
}
p1 = p2;
}
if (bAdd)
pt3dArr.removeLast();
if ((nCount % 2) == 0)
return false; // 交点数为偶数,不在区域内
else
return true; // 交点数为奇数,在区域内
}
dyzhao889
2008-12-14
打赏
举报
回复
谢谢楼上的大哥,能否给段代码?
lihuasoft
2008-12-14
打赏
举报
回复
(看一下上面我两条回复的时间,有意思。)
lihuasoft
2008-12-14
打赏
举报
回复
将每条边线延伸, 并作为一边向外侧构建足够大的矩形, 判断目标点是否在这些矩形内, 如果目标点不在每一个矩形内, 就可以断定点在多边形内部
lihuasoft
2008-12-14
打赏
举报
回复
将每条边线延伸, 并作为一边向外侧构建足够大的矩形, 判断目标点是否在这些矩形内, 如果目标点不在每一个矩形内, 就可以断定点在多边形内部
java
判断
百度地图的
点
是否
在
多边形
区域
内
java
判断
百度地图的
点
是否
在
多边形
区域
内,这是完整的demo
判断
指定的经纬度坐标
点
是否
落在指定的
多边形
区域
内
描述: 在矢量
多边形
区域
中,
一个
坐标
点
的位置
是否
在
区域
内 算法: C#代码,适用于任意
多边形
(凹凸
多边形
),但是没有考虑实际误差范围的情况(应用在实际问题解决中,接近
区域
一定范围是可以忽略的,这个误差范围考虑后算法的复杂度会加倍,所以没有做这方面的考虑)
射线法:解决
区域
闯入问题——如何
判断
点
是否
在闭合
不规则
多边形
平面内
在目标检测与识别领域中,我们经常会遇到
判断
人员、车辆等物体的位置问题。例如,在城市交通中有一段道路因为发生塌陷需要施工,现来往车辆均不可以靠近这段危险道路。l利用搭建交通摄像头和语音报警器的方式,需要24小时不间断识别来往车辆的位置以及
是否
靠近此
区域
。 对于这个问题,主要分为两个步骤: 1.摄像头
区域
中车辆位置的精准定位问题; 2.得到框定坐标后,我们得到可以推理得到框四个角的坐标,并
判断
它们的重要性(对于车来说4个角重要性平等,而对于行人来说,左下角和右下角坐标视为行人的足部位置,这两
点
才真实反馈了行人的位置),利用射线法来确定
是否
闯入的问题。 对于识别目标,我们可以得到这些框定信息: info[[[a1,b1,c1,d1],e1],[[a2,b2,c2,d2],e2]],a是左上角x坐标,b是左上角y坐标,c是右下角x坐标,d是右下角y坐标,e是置信度。
判断
某
点
是否
在任意
多边形
C语言源码(包含设计说明文档)
判断
某
点
是否
在任意
多边形
C语言源码,使用射线法设计,包含设计说明
判断
点
在地图闭合
区域
内还是外算法
可以快速的
判断
某
点
在地图闭合
区域
范围内还是在
区域
内。
语言基础/算法/系统设计
16,747
社区成员
33,239
社区内容
发帖
与我相关
我的任务
语言基础/算法/系统设计
Delphi 语言基础/算法/系统设计
复制链接
扫一扫
分享
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章