在matlab中绘制两个面片之间的三维线

在matlab中绘制两个面片之间的三维线,matlab,3d,line,mesh,Matlab,3d,Line,Mesh,我有两组坐标,形式如下: v= (x1 y1 z1 a1 b1 c1, x2 y2 z2 a2 b2 c2, ...., xn yn zn an bn cn) 这些是来自两个网格的顶点坐标。我想画一条3D线,将mesh1中的顶点连接到mesh2中相应的顶点。我正在使用patch函数显示两个网格。我尝试了plot3,它似乎只在单个网格中连接点之间的线 代码: 我得到了类似下图的东西。 我想要这样的东西 这些坐标实际上是两个网格中匹配关键点的顶点。我使用匹配的索引来获得坐标

我有两组坐标,形式如下:

v= (x1 y1 z1 a1 b1 c1,
    x2 y2 z2 a2 b2 c2,
    ....,
    xn yn zn an bn cn)
这些是来自两个网格的顶点坐标。我想画一条3D线,将mesh1中的顶点连接到mesh2中相应的顶点。我正在使用
patch
函数显示两个网格。我尝试了
plot3
,它似乎只在单个网格中连接点之间的线

代码:

我得到了类似下图的东西。 我想要这样的东西


这些坐标实际上是两个网格中匹配关键点的顶点。我使用匹配的索引来获得坐标,并在它们之间画一条线。我的代码有问题吗?或者我应该研究对匹配项设置阈值吗?

经过仔细研究,我发现我的匹配项中有很多异常值。在对匹配的关键点坐标执行
RANSAC
后,我能够获得一些okayish输出

帮助我画匹配的代码如下

v=[best_match_query, best_match_test];
x=[v(:,1), v(:,4)];
y=[v(:,2), v(:,5)];
z=[v(:,3), v(:,6)];
figure
p0 = patch('Faces',faces0,'Vertices',vertex0,'FaceColor','blue','FaceAlpha',.5,'edgecolor', 'none');
p1 = patch('Faces',faces1,'Vertices',vertex1,'FaceColor','red','FaceAlpha',.2,'edgecolor', 'none');
legend('template', 'test')
axis equal off
hold on
plot3(x',y',z')
view(0,90)

您在plot3中肯定没有正确的点,但我们无法提供更多帮助,因为您没有表示任何歉意,但整个代码在读取网格、检测关键点等方面有点太大。我应该编辑我的问题吗?我正在使用这个软件包来完成这项工作。诚然,这是我们所能提供的最大帮助(你给了plot3错误的分数)。否则,您需要创建一个最小的示例来显示此行为。你能给我提供一些关于plot3使用v中顶点的一般例子吗?这对我来说是一个开始Plot 3是一个基本功能,阅读文档。我刚刚注意到,在你(可笑地缩小)的试验中,你的所有观点都没有达到应有的程度。所以要么你的特征是错误的,要么你匹配错了。作为一个调试工具,我建议将您的
plot3
替换为for循环,在每次迭代中,您只需画一条线。在图中只画一两条线。这将帮助您确定问题所在
v=[best_match_query, best_match_test];
x=[v(:,1), v(:,4)];
y=[v(:,2), v(:,5)];
z=[v(:,3), v(:,6)];
figure
p0 = patch('Faces',faces0,'Vertices',vertex0,'FaceColor','blue','FaceAlpha',.5,'edgecolor', 'none');
p1 = patch('Faces',faces1,'Vertices',vertex1,'FaceColor','red','FaceAlpha',.2,'edgecolor', 'none');
legend('template', 'test')
axis equal off
hold on
plot3(x',y',z')
view(0,90)