関数ファイルを使用しています[ret]=drawellipse(x,y,a,b,angle,steps,color,img)
。スクリプト ファイルを介して関数を呼び出して、画像にランダムな楕円を描画します。しかし、ランダムな中心点(x、y)とランダムなa、bを設定すると、楕円の交差が発生する可能性が高くなります。交差を防ぐにはどうすればよいですか?(私は、互いに別々の楕円を描画することになっています) さて、ここに、楕円が重なり合っているかどうかをチェックする関数ファイルがありますoverlap = overlap_ellipses(x0,y0,a0,b0,angle0,x1,y1,a1,b1,angle1)
。2 つの楕円が重なっている場合は「overlap=1」、そうでない場合は「overlap=0」です。これらすべてに基づいて、コマンドウィンドウでテストしました:
x=rand(4,1)*400; % x and y are the random coodinates for the center of ellipses
y=rand(4,1)*400;
a=[50 69 30 60]; % major axis for a and b, i intend to use random also in the future
b=[20 40 10 40]; % minor axis
angle=[30 90 45 0]; % angle of ellipse
steps=10000;
color=[255 0 0]; % inputs for another function file to draw the ellipse
img=zeros(500,500,3);
次の例では、楕円if overlap==0
を表示し、「オーバーラップ == 1 の場合」、交差がなくなるまで a と b を減らします。最後に、img を表示します。
for i=1:length(x)
img=drawellipse(x(i),y(i),a(i),b(i),angle(i),steps,color,img);
end
私にとっては、中間部分のコーディングが困難です。if ステートメントを使用して値を取得するoverlap
方法と、描画する必要がある楕円に対応するインデックスを作成する方法を教えてください。
私は少しのようにテストしました
for k=1:(length(x)-1)
overlap = overlap_ellipses(x(1),y(1),a(1),b(1),angle(1),x(1+k),y(1+k),a(1+k),b(1+k),angle(1+k))
end
戻ります
overlap=0
overlap=0
overlap=1
[0 0 1] ではありません。私はそれを理解できないので、プロセスに行き詰まっています。最終的な画像は、この楕円のボロノイ図の図のようになります。(2 つの楕円の間に交点はありません)