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

5 views (last 30 days)
MathWorks Support Team
MathWorks Support Team on 26 Aug 2020
delaunay で求められる三角形の頂点間の距離を求める方法について教えて下さい。

Accepted Answer

MathWorks Support Team
MathWorks Support Team on 23 Sep 2020
Edited: MathWorks Support Team on 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

More Answers (0)

Categories

Find more on Delaunay 三角形分割 in Help Center and File Exchange

Tags

No tags entered yet.

Products

Community Treasure Hunt

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

Start Hunting!