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

3 ビュー (過去 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 Center および File Exchangeボロノイ線図 についてさらに検索

Community Treasure Hunt

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

Start Hunting!