delaunay で求められる三角形の​頂点間の距離を計算す​るにはどうすればいい​ですか?

6 ビュー (過去 30 日間)
MathWorks Support Team
MathWorks Support Team 2020 年 8 月 26 日
編集済み: MathWorks Support Team 2020 年 9 月 23 日
delaunay で求められる三角形の頂点間の距離を求める方法について教えて下さい。

採用された回答

MathWorks Support Team
MathWorks Support Team 2020 年 9 月 23 日
編集済み: MathWorks Support Team 2020 年 9 月 23 日
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 件)

カテゴリ

Help Center および File ExchangeDelaunay 三角形分割 についてさらに検索

タグ

タグが未入力です。

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!