如何分配一个三角吗

6视图(30天)
王杰克
王杰克 2020年8月16日
回答: 小君Matsubayashi2022年4月8日
有一个三角,这是没有连接的两个部分,如何区分?
例如,一个三角TR,连接矩阵是TR.ConnectivityList
[3 4 5;
4 6 3;
5 3 6;
8 9 2;
9 8 2]
我们可以看到,3 4 5 6连接和2 8 9相连,如何区分两个剖分,Tr1 TR2
我试图使用双重循环或双。虽然功能可以实现,但效率很低,实际数据是成千上万的点,(3 d点)
现在我用无向图来处理它们,这是比或更快,但是这个过程是非常复杂的,,,
有简单的方法吗?或者一些matlab内置函数/声明吗?
连接= (TR。ConnectivityList (:, (1 2)); TR。ConnectivityList (: 3 [2]); TR。ConnectivityList (: 3 [1])];
连接=独特(排序(连接,2),“行”);
图G =(连接(:1),连接(:,2));%节点连接,有很多噪声点
%的阴谋(G)
垃圾箱= conncomp (G);
i = 1:马克斯(箱)
p_index =找到(垃圾箱= =我);
m = ismember (TR.ConnectivityList p_index);
t_ind =和(m, 2) > 0;
TR_sorted{我:}=三角(TR.ConnectivityList (t_ind:), TR.Points);
结束

答案(1)

小君Matsubayashi
小君Matsubayashi 2022年4月8日
我和你面临同样的问题。也许太迟了回复,但我建议一个解决方案。这段代码不涉及任何for循环。
tmp = TR.ConnectivityList;
groupnumber = 1;
subTR =细胞(1,1);
~ isempty (tmp)
流('发现组# % d ',groupnumber);
:poolvec = tmp (1);
poolvecsize = 3;
长度(poolvecsize) = = 1 | | poolvecsize(结束)> poolvecsize (end-1)
印第安纳州=任何(ismember (tmp poolvec), 2);
poolvec =独特([重塑(tmp(印第安纳州:),1,[])poolvec]);
poolvecsize = [poolvecsize长度(poolvec)];
流(“。”);
结束
流(‘\ nCumulative面临数量:% d \ n '总和(印第安纳州));
subTR {groupnumber} = tmp(印第安纳州:);
tmp = tmp(~印第安纳州,:);
groupnumber = groupnumber + 1;
结束

类别

找到更多的在三角表示帮助中心文件交换

s manbetx 845


释放

R2018b

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!