delaunay で求められる三角形の頂点間の距離を計算するにはどうすればいいですか?
6 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
MathWorks Support Team
am 26 Aug. 2020
Bearbeitet: MathWorks Support Team
am 23 Sep. 2020
delaunay で求められる三角形の頂点間の距離を求める方法について教えて下さい。
Akzeptierte Antwort
MathWorks Support Team
am 23 Sep. 2020
Bearbeitet: MathWorks Support Team
am 23 Sep. 2020
DT = delaunay(x,y); より得られる DT から求めていく方法の場合、重複する辺などがあり、ソースコードや計算が煩雑化する可能性があります。
h = triplot(DT,x,y);
で一度グラフを描画し、戻り値 h にラインの情報が含まれますので、こちらを利用する方法が考えられます。
h.XData, h.YData は グラフ上の辺の数 x 3 の点群が定義されます。
h.YData には、 [x11,x12, NaN, x21,x22, NaN, x31,x32, NaN ]のように
h.YData には、 [y11,y12, NaN, y21,y22, NaN, y31,y32, NaN ]のように
定義されています。
3の倍数の要素番号には NaN が定義されますので、それ以外の 3*n-1, 3*n-2 の要素番号が一片のペアを示しますので、こちらを順に取得します。
一例としては以下のようになります。
% (x,y) 座標を定義
x = rand(20,1) * 10;
y = rand(20,1) * 10;
% delaunay三角形分割し、グラフ表示
DT = delaunay(x,y);
h = triplot(DT,x,y);
% グラフから xdata, ydata のペアを取得
xd = h.XData;
yd = h.YData;
% 各線の長さを計算 (+ グラフに長さ表示を上書き)
for n = 1:length(xd)/3
xz = xd(3*n-1)-xd(3*n-2);
yz = yd(3*n-1)-yd(3*n-2);
d(n) = norm([xz, yz]);
text( mean([xd(3*n-1),xd(3*n-2)]) ,mean([yd(3*n-1),yd(3*n-2)]), ['*',num2str(d(n))])
end
0 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Delaunay 三角形分割 finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!