游戏开发论坛

 找回密码
 立即注册
搜索
查看: 8544|回复: 11

怎么样判断平面上一个点是不是在一个多边形内部?

[复制链接]

2

主题

59

帖子

59

积分

注册会员

Rank: 2

积分
59
发表于 2005-3-2 20:24:00 | 显示全部楼层 |阅读模式
多边形是由顺时针点集定义的。

有哪位知道吗?

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2005-3-2 20:37:00 | 显示全部楼层

Re:怎么样判断平面上一个点是不是在一个多边形内部?

把多边形切成三角形,把三角形的三个顶点和那个点连起来,算角度。
如果角度和是360度则是在该三角形内。

31

主题

630

帖子

635

积分

高级会员

Rank: 4

积分
635
发表于 2005-3-2 20:46:00 | 显示全部楼层

Re:怎么样判断平面上一个点是不是在一个多边形内部?

好像春节以前才刚刚讨论过吧

2

主题

59

帖子

59

积分

注册会员

Rank: 2

积分
59
 楼主| 发表于 2005-3-2 22:54:00 | 显示全部楼层

Re:怎么样判断平面上一个点是不是在一个多边形内部?

是吗?我找找...我考虑过把多边形切成三角形,但似乎如果多边形是凹多边形的话,切出来的三角形可能在多边形外面,有什么确定的算法吗?

0

主题

6

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2005-3-2 23:53:00 | 显示全部楼层

Re: 怎么样判断平面上一个点是不是在一个多边形内部?

 判断点P是否在多边形中是计算几何中一个非常基本但是十分重要的算法。以点P为端点,向左方作射线L,由于多边形是有界的,所以射线L的左端一定在多边形外,考虑沿着L从无穷远处开始自左向右移动,遇到和多边形的第一个交点的时候,进入到了多边形的内部,遇到第二个交点的时候,离开了多边形,……所以很容易看出当L和多边形的交点数目C是奇数的时候,P在多边形内,是偶数的话P在多边形外。
为了统一起见,在计算射线L和多边形的交点的时候,1。对于多边形的水平边不作考虑;2。对于多边形的顶点和L相交的情况,如果该顶点是其所属的边上纵坐标较大的顶点,则计数,否则忽略;3。对于P在多边形边上的情形,直接可判断P属于多边行。

55

主题

175

帖子

193

积分

注册会员

Rank: 2

积分
193
发表于 2005-3-3 00:29:00 | 显示全部楼层

Re:怎么样判断平面上一个点是不是在一个多边形内部?

//如果点在多边形内,则返回值为1.
//如果点在多边形外,则返回值为0.
//在边界上返回值不确定,可能0或1.
int is_point_in_polygon_cn(const point_type* P, int n, const point_type& tp)
{
        int i, j, b = 0;
        for (i = 0, j = n-1; i < n; j = i++)
        {
                if(((P.y <= tp.y  &&  tp.y < P[j].y)   ||  
                        (P[j].y <= tp.y  &&  tp.y < P.y))  &&  
                        tp.x < (P[j].x - P.x) * (tp.y - P.y) / (P[j].y - P.y) + P.x)
                        b = !b;
        }
        return b;
}

http://www.faqs.org/faqs/graphics/algorithms-faq/

2

主题

59

帖子

59

积分

注册会员

Rank: 2

积分
59
 楼主| 发表于 2005-3-3 10:31:00 | 显示全部楼层

Re:怎么样判断平面上一个点是不是在一个多边形内部?

谢谢楼上两位

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2005-3-3 11:32:00 | 显示全部楼层

Re:怎么样判断平面上一个点是不是在一个多边形内部?

。。。平面上判断?还是空间中判断?空间中判断用角度来判断应该是效率比较高的方法。

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2005-3-3 13:26:00 | 显示全部楼层

Re:怎么样判断平面上一个点是不是在一个多边形内部?

角度判断是有问题的,而且计算量太大,射线法是国际上公认的算法。

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2005-3-4 08:48:00 | 显示全部楼层

Re:怎么样判断平面上一个点是不是在一个多边形内部?

我是说判断空间中一点是否在一个三角形面上用角度法。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-25 10:11

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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