判断点在封闭多边形内部

判断点在一个面域的内部

前言

作者在学习工作中,经常需要和几何相关内容打交道,因此分享自己在编程过程中遇到的一些问题和解决方法,也十分欢迎各位私信与我交流,另外如有不懂得地方也可以找我,在下会积极回复。

问题分析

通常来说,人眼能一眼就看出一个点是否处于面内,但是如何让计算机知道呢?
在这里插入图片描述

奇偶判断法

通过待判断点向任意方向发射一条射线,射线与面域相交的交点个数若为奇数,则判断该点在内部,反之则在外部。
在这里插入图片描述

相交判断

那么另一个问题来了,如何判断射线和一条直线是否相交呢
在这里插入图片描述

1.直线两端点应在射线两侧

在这里插入图片描述

如上图,第一步应保证端点a,b分别在射线两侧,而判断点在线的方位,常用叉积的办法。这可以通过分别计算向量a、b与射线方向向量的叉积,若两叉积异号则证明在两侧。

2.一条向量与射线向量在另一向量的同侧

在这里插入图片描述

通过第一步操作,我们能把射线区域限定在上述斜线区域,但是明显能观察到,只有在绿色区域才会与直线相交,因此我们需要继续增加约束,排除棕色区域。
例如上图绿色区域,向量b和射线向量都在向量a的下侧。

代码实现

C#

public
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值