gpt4 book ai didi

algorithm - 多边形算法解释中的点

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:59:30 28 4
gpt4 key购买 nike

您好,我从 Mathhelpforum 了解到这个算法它确定一个点是在多边形内部还是外部。到目前为止,代码运行良好,但我不完全理解其中的逻辑。如果你这样做,请提供一个解释,特别是在方法上......无论是光线转换,还是缠绕数等。谢谢。

function [ inside ] = inpoly(polygon,xt,yt)

rows = size(polygon);
npoints = rows(1);
disp (npoints);
inside = 0;

xold = polygon(npoints,1);
yold = polygon(npoints,2);

for i = 1:1:npoints

xnew = polygon(i,1);
ynew = polygon(i,2);

if (xnew > xold)
x1=xold;
x2=xnew;
y1=yold;
y2=ynew;
else
x1=xnew;
x2=xold;
y1=ynew;
y2=yold;
end

if ((xnew < xt) == (xt <= xold) & (yt-y1)*(x2-x1) < (y2-y1)*(xt-x1) )
inside=~inside;
end

xold=xnew;
yold=ynew;

end

endfunction

测试功能,例如:

inpoly([p,q],x,y)

其中p和q是多边形的顶点和点的x、y坐标。

最佳答案

对我来说似乎是光线转换。变量 x1 , y1 , x2 , y2是相对于 X 排序的多边形边的端点。条件 (xnew < xt) == (xt <= xold)测试是否从点 xt,yt 开始的 Y 平行线满足的一面。条件的另一部分测试 if xt,yt位于多边形边的右侧。

条件

(yt-y1)*(x2-x1) < (y2-y1)*(xt-x1)

相当于

(yt-y1)*(x2-x1) - (y2-y1)*(xt-x1) < 0

这是一个矩阵行列式

| yt-y1  xt-x1 |
| | < 0
| y2-y1 x2-x1 |

矩阵是向量叉积

(pointT - point1) times (point2 - point1)

关于algorithm - 多边形算法解释中的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29485025/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com