我有一张像这样的地面图像:
我还有一系列包围形状的点,如图所示。
我的目标是以指向"内部"的方式显示每个点的法线向量。区域,即更白的区域。
我的尝试是计算每个点(它的2个方向)的法向量。
在我得到双面法线向量后,我试图确定哪个边指向"内部"通过在法线的2个边缘周围求一个面积(3 * 3,5 * 5 ......)并在它们之间进行比较()。
结果很模糊..
我需要帮助才能找到另一个想法..
答案 0 :(得分:1)
虽然我期待有人能够提供更智能的数学解决方案,但我会为您提供程序化/ MATLAB解决方案。请注意,如果区域是凸的,则可以找到一个很好/简单的解决方案,但似乎并非如此。
你提到你有点和法向量(否则得法线很容易)。在正常距离中向边界中的点添加非常小的量,从而计算将要
的新点a)区域内
b)区域外
取决于法线指向的方向。
使用原始点定义多边形,然后使用旧点测试inpolygon
新点。对于进入的点,法线是向内的,而如果它们出局,则法线向外。
当多边形非常非凸时,这有一个缺陷,因为有时指出的东西可以使得点。但是,如果你使用相邻点计算了所有法线,它们将全部向外或全部向内。你可以通过inpolygon
技巧然后使用最重复的方向来了解原因。
答案 1 :(得分:1)
您还可以从矢量乘法的功能中受益。
A . B > 0
当vectros之间的角度低于90°时; A . B < 0
; A . B = 0
。A x B
指向上方; A x B
向下点vhen vectro命令是“左手”; A x B
为(0,0,0)
。然后将您的代码编写为folloows:
n{ii}
,t{ii}
)。v{ii} = n{ii} x t{ii}
。sg(ii)=sign(v{ii-1}.v{ii})
。sg(ii)
- 向量与ii
向量具有相同方向时, ii-1
为正。
当sg(ii)
时,ii
为负数,向量指向内,ii-1
指向外,反之亦然。
如果您确定法线向量是指向前还是向外,则可以轻松确定所有点的方向。