ボロノイ線図と特定のエリアの領域との交点

조회 수: 5 (최근 30일)
yusuke kobayashi
yusuke kobayashi 2019년 1월 24일
편집: yusuke kobayashi 2019년 1월 26일
ボロノイ線図を利用して、領域を区分けしたいと思っています。
ある領域(ここでは正方形にしています)と、ボロノイ線図の交点を計算したいのですが、
やり方がわかりません。どなたか知っていませんか?

채택된 답변

Tohru Kikawada
Tohru Kikawada 2019년 1월 25일
편집: Tohru Kikawada 2019년 1월 25일
下記のようなイメージでしょうか。
%% ボロノイ図の作成
x = gallery('uniformdata',[1 10],0);
y = gallery('uniformdata',[1 10],1);
[vx,vy] = voronoi(x,y);
figure, plot(vx,vy,'b-')
axis equal;
axis([0 1 0 1]);
%% 正方形の領域定義
poly1 = polyshape([0.25 0.25 0.75 0.75],[0.75 0.25 0.25 0.75]);
hold on;
plot(poly1)
%% 正方形の辺とボロノイ図の辺の交点を検出
for k = 1:size(vx,2)
% 交点を検出
[in,out] = intersect(poly1,[vx(:,k) vy(:,k)]);
plot(in(:,1),in(:,2),'b',out(:,1),out(:,2),'r')
% 交点座標を抽出
if ~isempty(in) && ~isempty(out)
ind = ismember(in,out,'rows');
intxy = in(ind,:);
plot(intxy(1),intxy(2),'ro');
end
end
  댓글 수: 5
Tohru Kikawada
Tohru Kikawada 2019년 1월 25일
なるほど、交点というよりも各領域を出されたかったんですね。それでしたら、各辺の交点を求めるよりも、各領域と正方形の和集合を求めるほうが近道だと思います。
  1. voronoin でそれぞれの領域の頂点のリストを作る
  2. 各領域の頂点をpolyshape でオブジェクト化
  3. intersect で正方形と各領域の和集合をとる
トライしてみてください。
yusuke kobayashi
yusuke kobayashi 2019년 1월 26일
편집: yusuke kobayashi 2019년 1월 26일
その方法をやってみようと思って、下のように書いてはみたのですが、
polyshape は inf を扱えないと言われて跳ね返されてしまいます。
[v,c] = voronoin(X);
%外形の領域の定義
poly1 = polyshape([0 1 1 0],[0 0 1 1]);
hold on
for k = 1:size(X(:,1),2)
Region = [v(c{k},1),v(c{k},2)];
poly2 = polyshape(Region);
hold on
Overlap = intersect(poly1,poly2);
Area = polyshape(Overlap.Vertices);
plot(Area,'Facecolor','g')
end     

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 ボロノイ線図에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!