MATLAB Answers

koba
0

制約付きドローネ三角形分割

Asked by koba
on 21 Sep 2019
Latest activity Commented on by Kenta Itakura on 22 Sep 2019
1枚目の写真のような赤い線と丸で作られた図形と点(*)があります。
これをドローネ三角形分割したら2枚目の写真のような結果になりました。
赤い線と丸で作られた図形の形を崩さないようにドローネ三角形分割するにはどのようにすれば良いですか?
2枚目の写真では赤い斜め線をまたいで三角形分割されているので、赤い斜め線をまたがないようにしたいです。
%6角形
ROKUKAKU=[
386.9039 201.9076
427.7949 192.7330
440.2949 152.7330
411.9039 121.9076
371.0128 131.0823
358.5128 171.0823
386.9039 201.9076
];
plot(ROKUKAKU(:,1),ROKUKAKU(:,2),'-o','Color','r');
daspect([1 1 1])
%斜め線
KI=[
450.0000 0
425.0000 80.0000
437.5000 40.0000
400.0000 160.0000
];
hold on
plot(KI(:,1),KI(:,2),'-o','Color','r')
MAWARI=[
300 0
300 100
300 200
300 300
400 0
400 300
500 0
500 300
600 0
600 100
600 200
600 300
];
plot(MAWARI(:,1),MAWARI(:,2),'*')
TUIKA=[
320.5000 0.5000
320.5000 64.5000
320.5000 128.5000
320.5000 160.5000
320.5000 192.5000
320.5000 256.5000
352.5000 128.5000
352.5000 192.5000
384.5000 0.5000
384.5000 32.5000
384.5000 64.5000
384.5000 96.5000
384.5000 224.5000
384.5000 256.5000
416.5000 0.5000
416.5000 32.5000
416.5000 64.5000
416.5000 96.5000
416.5000 224.5000
416.5000 256.5000
448.5000 64.5000
448.5000 96.5000
448.5000 128.5000
448.5000 192.5000
448.5000 224.5000
448.5000 256.5000
480.5000 0.5000
480.5000 32.5000
480.5000 64.5000
512.5000 32.5000
512.5000 64.5000
512.5000 128.5000
512.5000 192.5000
512.5000 256.5000
576.5000 0.5000
576.5000 64.5000
576.5000 128.5000];
plot(TUIKA(:,1),TUIKA(:,2),'*')
%三角形分割
DX=[ROKUKAKU(:,1);KI(:,1);MAWARI(:,1);TUIKA(:,1)];
DY=[ROKUKAKU(:,2);KI(:,2);MAWARI(:,2);TUIKA(:,2)];
dt=delaunayTriangulation(DX,DY);
hold off
plot(ROKUKAKU(:,1),ROKUKAKU(:,2),'-o','Color','r');
hold on
daspect([1 1 1])
plot(KI(:,1),KI(:,2),'-o','Color','r')
plot(MAWARI(:,1),MAWARI(:,2),'o')
plot(TUIKA(:,1),TUIKA(:,2),'*')
triplot(dt,'b')
a.jpg b.jpg

  0 Comments

Sign in to comment.

1 Answer

Answer by Kenta Itakura on 21 Sep 2019
 Accepted Answer

%%%のコメントにあるように、制約をつければ、赤い線をまたがずになりましたが、これで望む結果が得られていますでしょうか。
clear;clc;close all
%6角形
ROKUKAKU=[
386.9039 201.9076
427.7949 192.7330
440.2949 152.7330
411.9039 121.9076
371.0128 131.0823
358.5128 171.0823
386.9039 201.9076
];
plot(ROKUKAKU(:,1),ROKUKAKU(:,2),'-o','Color','r');
daspect([1 1 1])
%斜め線
KI=[
450.0000 0
425.0000 80.0000
437.5000 40.0000
400.0000 160.0000
];
hold on
plot(KI(:,1),KI(:,2),'-o','Color','r')
MAWARI=[
300 0
300 100
300 200
300 300
400 0
400 300
500 0
500 300
600 0
600 100
600 200
600 300
];
plot(MAWARI(:,1),MAWARI(:,2),'*')
TUIKA=[
320.5000 0.5000
320.5000 64.5000
320.5000 128.5000
320.5000 160.5000
320.5000 192.5000
320.5000 256.5000
352.5000 128.5000
352.5000 192.5000
384.5000 0.5000
384.5000 32.5000
384.5000 64.5000
384.5000 96.5000
384.5000 224.5000
384.5000 256.5000
416.5000 0.5000
416.5000 32.5000
416.5000 64.5000
416.5000 96.5000
416.5000 224.5000
416.5000 256.5000
448.5000 64.5000
448.5000 96.5000
448.5000 128.5000
448.5000 192.5000
448.5000 224.5000
448.5000 256.5000
480.5000 0.5000
480.5000 32.5000
480.5000 64.5000
512.5000 32.5000
512.5000 64.5000
512.5000 128.5000
512.5000 192.5000
512.5000 256.5000
576.5000 0.5000
576.5000 64.5000
576.5000 128.5000];
plot(TUIKA(:,1),TUIKA(:,2),'*')
%三角形分割
%%%%%%%%% ここが変更点です
KI_sorted=sortrows(KI,2);
DX=[KI_sorted(:,1);ROKUKAKU(:,1);MAWARI(:,1);TUIKA(:,1)];
DY=[KI_sorted(:,2);ROKUKAKU(:,2);MAWARI(:,2);TUIKA(:,2)];
Cons=[[1:size(KI,1)]',[1:size(KI,1)]'+1];
Cons(end,2)=1;
dt=delaunayTriangulation([DX,DY],Cons);
%%%%%%%% ここまで
hold off
plot(ROKUKAKU(:,1),ROKUKAKU(:,2),'-o','Color','r');
hold on
daspect([1 1 1])
plot(KI(:,1),KI(:,2),'-o','Color','r')
plot(MAWARI(:,1),MAWARI(:,2),'o')
plot(TUIKA(:,1),TUIKA(:,2),'*')
triplot(dt,'b')

  4 Comments

Show 1 older comment
Kenta Itakura on 22 Sep 2019
よかったです。ちなみに、このような分割はどのようなシーンで使われるのでしょうか?
koba
on 22 Sep 2019
亀裂のある板のFEM解析をしようとしています。この図でいうと赤の斜め線が亀裂を表現しています。なので亀裂をまたがないように三角形分割をしたかったです。
Kenta Itakura on 22 Sep 2019
内容を教えていただき、ありがとうございます。興味深いですね。また、分割のことでなにかございましたら、ご連絡ください。

Sign in to comment.