Azzera filtri
Azzera filtri

For Intersecting Circles, how to remove overlapping arcs for 3 or more circles?

1 visualizzazione (ultimi 30 giorni)
In the attached image if you project the red lined plane to z=0 (2D) is there a way to plot the circles with chords shown, and arcs removed in MATLAB (as well as an extension to N circles)?
I have a solution posted from a previous question (2 circles) which will be shown here (with some minor changes):
clear all
clc
m = 100; % Number of points on circle
x_max = 50; % Uppermost x location of circle center
y_max = 50; % Uppermost y location of circle center
theta = 0:2*pi/m:2*pi; % Evaluated angles for circle
i = 1;
k = 2; %%%%%%%%%%%
rad(i) = 15*rand; % Save circle radii to array
x_pos(i) = x_max*rand; % Save circle xi-positions to array
y_pos(i) = y_max*rand; % Save circle yi-positions to array
rad(k) = 15*rand; % Save circle radii to array
x_pos(k) = x_max*rand; % Save circle xk-positions to array
y_pos(k) = y_max*rand; % Save circle yk-positions to array
Xk=x_pos(k)+rad(k)*cos(theta);
Yk=y_pos(k)+rad(k)*sin(theta);
Xi=x_pos(i)+rad(i)*cos(theta);
Yi=y_pos(i)+rad(i)*sin(theta);
dC1 = sqrt((Xi-x_pos(k)).^2+(Yi-y_pos(k)).^2)>=rad(k);
dC2 = sqrt((Xk-x_pos(i)).^2+(Yk-y_pos(i)).^2)>=rad(i);
plot(Xk(dC2.'),Yk(dC2.'),'m',Xi(dC1.'),Yi(dC1.'),'c');
axis([0 100 0 100]);
hold on
axis equal
Or maybe there is a way to have N circles fit the requirements above with a carefully restricted Voronoi/Delaunay plot?

Risposta accettata

Joseph Cheng
Joseph Cheng il 18 Giu 2014
Modificato: Joseph Cheng il 18 Giu 2014
Well... feels like i'm answering this again but what you can do is a for loop
clear all
clc
m = 1000; % Number of points on circle
x_max = 50; % Uppermost x location of circle center
y_max = 50; % Uppermost y location of circle center
theta = 0:2*pi/m:2*pi; % Evaluated angles for circle
k=3
%generate circles and store their points.
for i =1:k
rad(i) = 15*rand; % Save circle radii to array
x_pos(i) = x_max*rand; % Save circle xi-positions to array
y_pos(i) = y_max*rand; % Save circle yi-positions to array
X{i}=x_pos(i)+rad(i)*cos(theta);
Y{i}=y_pos(i)+rad(i)*sin(theta);
end
figure,
hold on
for j=1:3
plot(X{j},Y{j})
end
%perform loops for comparison.
for i=1:k-1
for j=i+1:k
dC1 = sqrt((X{i}-x_pos(j)).^2+(Y{i}-y_pos(j)).^2)>=rad(j);
X{i}(~dC1)=NaN;
Y{i}(~dC1)=NaN;
dC2 = sqrt((X{j}-x_pos(i)).^2+(Y{j}-y_pos(i)).^2)>=rad(i);
X{j}(~dC2)=NaN;
Y{j}(~dC2)=NaN;
end
end
figure,
hold on
for j=1:3
X{j}(isnan(X{j})) = [];
Y{j}(isnan(Y{j})) = [];
plot(X{j},Y{j})
end

Più risposte (0)

Categorie

Scopri di più su Graphics Object Programming in Help Center e File Exchange

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by