Matlab 将3D转换为点云

Matlab 将3D转换为点云,matlab,3d,shape,matlab-cvst,point-clouds,Matlab,3d,Shape,Matlab Cvst,Point Clouds,我正在使用持久同源性,我需要常见3D形状的云点来测试我的方法 问题是我是一个Java程序员,Java不提供这样的工具,但我很确定Matlab提供了。。。我试着在这里读到: http://www.mathworks.com/help/vision/ref/pcfitsphere.html http://www.mathworks.com/help/matlab/ref/sphere.html http://www.mathworks.com/help/vision/ref/pcshow.html#

我正在使用持久同源性,我需要常见3D形状的云点来测试我的方法

问题是我是一个Java程序员,Java不提供这样的工具,但我很确定Matlab提供了。。。我试着在这里读到:

http://www.mathworks.com/help/vision/ref/pcfitsphere.html
http://www.mathworks.com/help/matlab/ref/sphere.html
http://www.mathworks.com/help/vision/ref/pcshow.html#inputarg_ptCloud
这些链接提供了有关球体和点云的信息,但我从未在matlab上编程,所以我甚至不能提出代码

有没有办法制作3d形状,获取点云并在控制台上打印点云? 比如:

x0,y0,z0

x1,y1,z1

x2,y2,z2

。。。
我所做的是创建一个Java类,它根据一个函数打印随机点,例如,我给我的程序一个球体函数。。。但当我试图创建金字塔或三个圆环的函数时,它变得超级复杂。

这里是一个MATLAB示例:

请参阅以供参考


编辑 下面是在棱锥体内生成点的另一个示例

这一次我采用了蛮力方法,只需在[0,1]立方体中生成大量随机3d点,然后(使用Delaunay三角剖分)对其进行过滤


以下是一个MATLAB示例:

请参阅以供参考


编辑 下面是在棱锥体内生成点的另一个示例

这一次我采用了蛮力方法,只需在[0,1]立方体中生成大量随机3d点,然后(使用Delaunay三角剖分)对其进行过滤


我认为您在Java中尝试的方法与在Matlab中尝试的方法相同。听起来您要求的是描述特定3d形状的方程式?我认为您在Java中尝试的方法与在Matlab中尝试的方法相同。听起来您要求的是描述特定3d形状的方程式?哇!太神了谢谢。嘿,你已经做了很多,但我想知道是否有办法打印这些坐标,比如:x0,y0,z0;x1,y1,z1。。。当然这是最简单的部分:)您可以使用或之类的函数,也可以只使用普通的old
FPRINTF
。对于第一个示例:
csvwrite('sphere.csv',[x y z])
,对于第二个示例,请说:
dlmwrite('pyramid.csv',XYZ(in,:),'precision','%.9f')
Nice!最后一件事,我刚刚意识到这些点也在形状内部。我还需要只在曲面上绘制点。这可能吗?哦,那实际上有点不同。。对于球体,您可以通过设置固定半径轻松修改代码,因此将其更改为
radii=3
(提供的链接对此进行了说明:)。对于另一种情况,delaunay三角测量是行不通的,抱歉!哇!太神了谢谢。嘿,你已经做了很多,但我想知道是否有办法打印这些坐标,比如:x0,y0,z0;x1,y1,z1。。。当然这是最简单的部分:)您可以使用或之类的函数,也可以只使用普通的old
FPRINTF
。对于第一个示例:
csvwrite('sphere.csv',[x y z])
,对于第二个示例,请说:
dlmwrite('pyramid.csv',XYZ(in,:),'precision','%.9f')
Nice!最后一件事,我刚刚意识到这些点也在形状内部。我还需要只在曲面上绘制点。这可能吗?哦,那实际上有点不同。。对于球体,您可以通过设置固定半径轻松修改代码,因此将其更改为
radii=3
(提供的链接对此进行了说明:)。对于另一种情况,delaunay三角测量是行不通的,抱歉!
% random points in spherical coordinates
N = 1000;
theta = 2*pi*rand(N,1);
phi = asin(2*rand(N,1)-1);
radii = 3*(rand(N,1).^(1/3));

% convert to cartesian
[x,y,z] = sph2cart(theta, phi, radii);

% plot
scatter3(x, y, z, 10, 'filled')
axis vis3d equal, grid on, box on
xlabel X, ylabel Y, zlabel Z
% random points
N = 3000;
XYZ = rand(N,3);

% unit pyramid in [0,1]
V = [0   0   0 ;
     1   0   0 ;
     1   1   0 ;
     0   1   0 ;
     0.5 0.5 0 ;
     0.5 0.5 sqrt(2)/2];

% delaunay triangulation
DT = delaunayn(V);

% determine points within
in = ~isnan(tsearchn(V, DT, XYZ));

% plot
scatter3(XYZ(in,1), XYZ(in,2), XYZ(in,3), 8, 'filled')
view(3), axis vis3d equal, grid on, box on
axis([0 1 0 1 0 1])
xlabel X, ylabel Y, zlabel Z

% overlay pyramid
hold on
h = tetramesh(DT, V);
set(h, 'FaceAlpha',0.1, 'EdgeColor','m', 'FaceColor','m')
hold off