1
我有两个矩阵(tri1
和tri2
),它们代表了Delaunay三角剖分。 tri1
是插入新点之前的三角剖分,tri2
是添加新点之后的结果。每行有4列。这些行代表四面体。如何快速计算两个n乘4矩阵的变化?
我想计算从tri1
到tri2
之间的关系。一个结果可能看起来像这样:
result =
1 1
2 2
3 3
4 4
0 0 % tri1(5, :) was not found in tri2 (a lot more lines could be missing)
6 5
7 6
8 7
9 8
10 9
目前我的源代码如下所示:
% sort the arrays
[~, idx1] = sort(tri1(:, 1), 'ascend');
[~, idx2] = sort(tri2(:, 1), 'ascend');
stri1 = tri1(idx1, :);
stri2 = tri2(idx2, :);
result = zeros(size(tri1, 1), 2);
% find old cells in new triangulation
deleted = 0;
for ii = 1:size(tri1, 1)
found = false;
for jj = ii-deleted:size(tri2, 1)
if sum(stri1(ii, :) == stri2(jj, :)) == 4 % hot spot according to the profiler
found = true;
break;
end
if (stri1(ii, 1) < stri2(jj, 1)), break, end;
end
if found == false
deleted = deleted + 1;
else
result(idx1(ii), 1) = idx1(ii);
result(idx1(ii), 2) = idx2(jj);
end
end
上面的源代码给我我想要的结果,但速度还不够快。我对MATLAB不是很有经验,我通常使用C++。 我的问题:如何加快两行的比较速度?
一些额外的信息(以防万一):
- 中行
tri
数量可增长到约10000 - 此功能将每个插入的顶点(1000)
谢谢,那正是我需要的! – bjoernz