我用表面范数matlab函数来计算表面法线。当我使用它为:surfnorm(pcloud(:,:,1),pcloud(:,:,2),pcloud(:,:,3));时,表面法线的图形会出现,但是法线值不会被保存。所以我使用:[Nx,Ny,Nz]=surfnorm(pcloud(:,:,1),pcloud(:,:,2),pcloud(:,:,3));,但它没有保存Nx,Ny,Nz中的正常值,但没有显示正常的图形。那么如何使两者兼而有之?
发布于 2013-07-25 08:11:45
根据文档,您希望同时执行的两个操作似乎是相互排斥的:
Nx,Ny,Nz = SURFNORM(X,Y,Z)返回含分量(X,Y,Z)的三维曲面的分量。将法线归一化为长度1。Nx,Ny,Nz = SURFNORM( Z )返回曲面Z的表面法线分量,不带左参数,SURFNORM(X,Y,Z)或SURFNORM(Z)绘制表面的法线。SURFNORM(AX,.)把地块变成斧子而不是GCA。
但是,一旦创建,您就可以从表面法线图中检索法线向量数据,如下所示:
h=figure;
surfnorm(pcloud(:,:,1),pcloud(:,:,2),pcloud(:,:,3));
axesObjs = get(h, 'Children');
dataObjs = get(axesObjs, 'Children');
[Nx,Ny,Nz] = deal(get(dataObjs(1), 'XData').', get(dataObjs(1), 'YData').', get(dataObjs(1), 'ZData').');这似乎是复杂的,但如果这是计算费用,您正在寻求避免这可能是最好的方式来做到这一点。
编辑:
(1)您可以将h=figure替换为调用figure,然后调用h=gcf。
(2)我对Nx, Ny, Nz向量的解释是,包含surfnorm绘制的向量的位置和方向的坐标(不一定是标准化的),以及附加的NaN值,所以如果打印出[Nx,Ny,Nz],您应该看到如下内容:
0 0 -1.0000 <-- position of origin
0 0 -1.0000 <-- direction of vector
NaN NaN NaN <-- nonsense
-0.5878 0 -0.8090
-0.7036 -0.0344 -0.9684
NaN NaN NaN
-0.9511 0 -0.3090
-1.1341 -0.0543 -0.3685
NaN NaN NaN
-0.9511 0 0.3090
-1.1341 -0.0543 0.3685
NaN NaN NaN
....https://stackoverflow.com/questions/17849053
复制相似问题