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

4 visualizzazioni (ultimi 30 giorni)
yusuke kobayashi
yusuke kobayashi il 24 Gen 2019
Modificato: yusuke kobayashi il 26 Gen 2019
ボロノイ線図を利用して、領域を区分けしたいと思っています。
ある領域(ここでは正方形にしています)と、ボロノイ線図の交点を計算したいのですが、
やり方がわかりません。どなたか知っていませんか?

Risposta accettata

Tohru Kikawada
Tohru Kikawada il 25 Gen 2019
Modificato: Tohru Kikawada il 25 Gen 2019
下記のようなイメージでしょうか。
%% ボロノイ図の作成
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 Commenti
Tohru Kikawada
Tohru Kikawada il 25 Gen 2019
なるほど、交点というよりも各領域を出されたかったんですね。それでしたら、各辺の交点を求めるよりも、各領域と正方形の和集合を求めるほうが近道だと思います。
  1. voronoin でそれぞれの領域の頂点のリストを作る
  2. 各領域の頂点をpolyshape でオブジェクト化
  3. intersect で正方形と各領域の和集合をとる
トライしてみてください。
yusuke kobayashi
yusuke kobayashi il 26 Gen 2019
Modificato: yusuke kobayashi il 26 Gen 2019
その方法をやってみようと思って、下のように書いてはみたのですが、
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     

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su ボロノイ線図 in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!