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

1 visualización (últimos 30 días)
MathWorks Support Team
MathWorks Support Team el 26 de Ag. de 2020
Editada: MathWorks Support Team el 23 de Sept. de 2020
delaunay で求められる三角形の頂点間の距離を求める方法について教えて下さい。

Respuesta aceptada

MathWorks Support Team
MathWorks Support Team el 23 de Sept. de 2020
Editada: MathWorks Support Team el 23 de Sept. de 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

Más respuestas (0)

Categorías

Más información sobre Delaunay 三角形分割 en Help Center y File Exchange.

Etiquetas

Aún no se han introducido etiquetas.

Productos

Community Treasure Hunt

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

Start Hunting!