求问Matlab里inpolygon函数的数学原理。

因为需要在fortran里判断一个点是否在多变形区域内,所以想把inpolygon函数改写成fortran程序……但是只能看懂函数里单个语句的意思,完全不明白原理。在ma... 因为需要在fortran里判断一个点是否在多变形区域内,所以想把inpolygon函数改写成fortran程序……但是只能看懂函数里单个语句的意思,完全不明白原理。在matlab论坛里看其他inpolygon函数相关的帖子,有人说:
“可以这样实现, 首先给定该多边形顺时针采样的序列: C{c1, ..., cn}

令待求点为p, 计算p的特征行列式序列:{|pci, pc(i+1)|}如果这个序列恒正, 则p在多边形内, 否则位于多边形外。这种方法还可以推广到多维, 如一个点是否在一个n维的几何体内。”

虽然不明白,但是我感觉inpolygon用的好像就是这种方法,里面有计算点乘和叉乘的语句。求解释!

如果有更好的方法也请说明……
展开
 我来答
N_0_1
高粉答主

推荐于2017-09-09 · 关注我不会让你失望
知道大有可为答主
回答量:8628
采纳率:47%
帮助的人:835万
展开全部

 首先给定该多边形顺时针采样的序列: C{c1, ..., cn};
令待求点为p, 计算p的特征行列式序列:{|pci, pc(i+1)|};

如果这个序列恒正, 则p在多边形内, 否则位于多边形外。这种方法还可以推广到多维, 如一个点是否在一个n维的几何体内。

Examples


L = linspace(0,2.*pi,6); xv = cos(L)';yv = sin(L)';

xv = [xv ; xv(1)]; yv = [yv ; yv(1)];

x = randn(250,1); y = randn(250,1);

in = inpolygon(x,y,xv,yv);

plot(xv,yv,x(in),y(in),'r+',x(~in),y(~in),'bo')

dukinkin
2014-08-25 · TA获得超过1.3万个赞
知道大有可为答主
回答量:2444
采纳率:90%
帮助的人:935万
展开全部
如果多边形的每个角的点已经按一顺时针排列(逆时针也可以)
matlab里用的有叉乘的,是用向量计算的办法

要判断某点P(x,y)是否在多边形内C{c1,c2,...cn}内
可以计算P到顺序相邻两点的向量的差乘值 Pc1Xc2 Pc2XPc3 .... Pcn-1XPcn PcnXPc1

如果在多边形里面 这些叉积都是 取相同符号的
如果符号相同中还有0值,表示在多边形边上
如果有正,有负表明点P在多边形外
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
davinci10
推荐于2017-09-24 · TA获得超过2513个赞
知道小有建树答主
回答量:1379
采纳率:50%
帮助的人:880万
展开全部
一般用转角法(弧长法)来判别被测点与多边形的关系
方法是以被测点为圆心作单位圆,将全部有向边向单位圆作径向投影,并计算其在单位圆上弧长的代数和
其实就是点乘向量的arccos函数值之和
外部是0,内部是2π,边上为π
这里有源代码,不过是C++的
http://wenku.baidu.com/link?url=BVISYea6fMtlvNABa0t4lu6XK3E2ALqJ5zH-JYuekHsrnXdbcxLfPDr3hwLuhVGugsuv6UuPrmzzkJy5B8j7i58umBq19lu7QYSrCmDf0de
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式