如何判断一个点在那个四边形内?

hellolegend 2008-05-28 09:00:15
一个平面由很多个小四边形组成,知道每个小四边形的4个顶点坐标

另外有一个点,知道其坐标,如何判断他在那个四边形内部?

因为要频繁的判断,所以计算的速度最好快一点。
...全文
1170 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
jj8113414 2009-06-22
  • 打赏
  • 举报
回复
楼上的,如果按你的办法的话计算量很大的哦,有没有更好的办法呢
kuotiansky 2009-03-02
  • 打赏
  • 举报
回复
判断点P是否在多边形中是计算几何中一个非常基本但是十分重要的算法。以点P为端点,向左方作射线L,由于多边形是有界的,所以射线L的左端一定在多边形外,考虑沿着L从无穷远处开始自左向右移动,遇到和多边形的第一个交点的时候,进入到了多边形的内部,遇到第二个交点的时候,离开了多边形,……所以很容易看出当L和多边形的交点数目C是奇数的时候,P在多边形内,是偶数的话P在多边形外。
csxrzeng 2008-12-30
  • 打赏
  • 举报
回复
凸四边形好办,
hellolegend 2008-05-29
  • 打赏
  • 举报
回复
to mwx285

“哪个”
mwx285 2008-05-29
  • 打赏
  • 举报
回复
“如何判断他在那个四边形内部?”
是"哪个"吗??
是要求取他所在四边形的话,直接计算
zyb_debug 2008-05-29
  • 打赏
  • 举报
回复
BOOL PtInRect(
CONST RECT *lprc, // rectangle
POINT pt // point
);


搂主MSDN一下这个函数
微软提供 能不自己写就不自己写 自己写的效率不高 除非你想研究算法 提高技术
zhangbin_115 2008-05-29
  • 打赏
  • 举报
回复
复杂
zwspider 2008-05-29
  • 打赏
  • 举报
回复
前提: 凸四边形

顺时针方向,设点为p0, p1, p2, p3

而点和向量的关系只有3种,点在向量左侧, 点在向量右侧, 点在向量所在直线上

问题转化为,判断点px在向量p0p1, p1p2, p2p3, p3p4的左侧或直线上。

现在要解决的问题是:如何判断点在向量左侧或直线上。(下面以p0p1为例)

1.求p0p1的法向量v,(可知方向是垂直p0p1指向四边形的外面)
2.求v和向量p0px的夹角,锐角表示px在p0p1的右侧,钝角表示在左侧, 直角就不必说了

问题解决~~~

hellolegend 2008-05-29
  • 打赏
  • 举报
回复
都是凸四边形
假设从p0点出发,顺时针方向,点的顺序可能是p0-> p1 -> p2 -> p3 -> p0,也有可能是p0 -> p2 -> p1 -> p3 -> p0
xiao_dang 2008-05-29
  • 打赏
  • 举报
回复
我想最简单的办法应该是:

对任意的一边,四边形的余下两个点位于这个点(相对于那条边)的同一侧,则点在四边形内部。
hellolegend 2008-05-29
  • 打赏
  • 举报
回复
准备用该点和4条边(每条边2个点)来判断,这样比较简单
qmm161 2008-05-29
  • 打赏
  • 举报
回复
考虑不规则四边形的情形,似乎比较复杂!
mark
fallening 2008-05-29
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zwspider 的回复:]
前提: 凸四边形

顺时针方向,设点为p0, p1, p2, p3

而点和向量的关系只有3种,点在向量左侧, 点在向量右侧, 点在向量所在直线上

问题转化为,判断点px在向量p0p1, p1p2, p2p3, p3p4的左侧或直线上。

现在要解决的问题是:如何判断点在向量左侧或直线上。(下面以p0p1为例)

1.求p0p1的法向量v,(可知方向是垂直p0p1指向四边形的外面)
2.求v和向量p0px的夹角,锐角表示px在p0p1的右侧,钝角表示在左侧, 直角…
[/Quote]
呵呵,这样的话,还不如通过四个小三角形面积与四边形面积的判断来得快
hellolegend 2008-05-28
  • 打赏
  • 举报
回复
to fallening
如果已知一个四边形和一个点可以这么判断
这样做的话,要将该点附近的所有四边形都判断一遍的
fallening 2008-05-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 hellolegend 的帖子:]
一个平面由很多个小四边形组成,知道每个小四边形的4个顶点坐标

另外有一个点,知道其坐标,如何判断他在那个四边形内部?

因为要频繁的判断,所以计算的速度最好快一点。
[/Quote]
用余弦公式判断这个点与四条边的构成的三角形的角度,如果这四个角度相加是2PI,那么就是在里边,否则是在外边

比较慢的做法,让我再想想
fallening 2008-05-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 k2eats 的回复:]
直接比较点的坐标和四边形的右上顶点和左下顶点坐标即可。
点的坐标应该分别小于四边形的右上顶点
点的坐标应该分别大于四边形的左下顶点

[/Quote]
这个有问题
K行天下 2008-05-28
  • 打赏
  • 举报
回复
直接比较点的坐标和四边形的右上顶点和左下顶点坐标即可。
点的坐标应该分别小于四边形的右上顶点
点的坐标应该分别大于四边形的左下顶点

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧