How to get the intersection points ??

Hi all, I have the following code to get the intersection points between these multiple lines and these multiple circles.
%%center of circles
X = [0.02 0.44; 0.08 0.58 ;...
0.22 0.57; 0.3 0.9; ...
0.44 0.79; 0.35 0.318;...
0.54 0.29; 0.95 0.11;...
0.93 0.7; 0.82 0.93];
C_M=[X(:,1) X(:,2)];
hold on
%%Assign labels to the points.
Assign_labels_to_all_points ( X ,X(:,1),X(:,2))
hold on
%%Draw circles
theta = linspace(0,2*pi) ;
x = 0.15*cos(theta) ; y =0.15*sin(theta) ;
C_M=[X(:,1),X(:,2)];
deg = 0 : 2.5 : 90;
for i=1:length(deg)
r =2;
x_ax = r*[zeros(size(deg(i))) cosd(deg(i))];
y_ax = r*[zeros(size(deg(i))) sind(deg(i))];
%%plot lines with different angles
plot(x_ax, y_ax, 'LineWidth',1.3)
for index = 1:length(C_M)
if ~isinf(C_M(index))
xx = x+C_M(index,1);
yy = y+C_M(index,2);
%%plot circles
plot(xx,yy,'-b','linewidth',1.5)
for j=1:length(deg)
P = InterX([x+C_M(index,1);y+C_M(index,2)],[r*[zeros(size(deg(j))) cosd(deg(j))];r*
[zeros(size(deg(j))) sind(deg(j))]]);
%%plot intersection points between lines and circles
plot(P(1,:),P(2,:),'or');
end
end
end
end
%%x and y axis limits
xlim([-0.2,1.2])
ylim([-0.2,1.2])
grid on
grid minor
I used the file exchange function InterX. It only draws the intersection points as the following image. But, I can't get these intersection points to store them in matrix or array.
So, my question is: How to get the intersection points between each line and the circles that intersected with that line and store them in array or matrix?? Any suggestions to modify this code??

1 Commento

Original question (in case he delete this one also):
How to get the intersection points between (each line and the circles that intersected with that line)??
Hi all, I have the following code to get the intersection points between these multiple lines and these multiple circles.
%%center of circles
X = [0.02 0.44; 0.08 0.58 ;...
0.22 0.57; 0.3 0.9; ...
0.44 0.79; 0.35 0.318;...
0.54 0.29; 0.95 0.11;...
0.93 0.7; 0.82 0.93];
C_M=[X(:,1) X(:,2)];
hold on
%%Assign labels to the points.
Assign_labels_to_all_points ( X ,X(:,1),X(:,2))
hold on
%%Draw circles
theta = linspace(0,2*pi) ;
x = 0.15*cos(theta) ; y =0.15*sin(theta) ;
C_M=[X(:,1),X(:,2)];
deg = 0 : 2.5 : 90;
for i=1:length(deg)
r =2;
x_ax = r*[zeros(size(deg(i))) cosd(deg(i))];
y_ax = r*[zeros(size(deg(i))) sind(deg(i))];
%%plot lines with different angles
plot(x_ax, y_ax, 'LineWidth',1.3)
for index = 1:length(C_M)
if ~isinf(C_M(index))
xx = x+C_M(index,1);
yy = y+C_M(index,2);
%%plot circles
plot(xx,yy,'-b','linewidth',1.5)
for j=1:length(deg)
P = InterX([x+C_M(index,1);y+C_M(index,2)],[r*[zeros(size(deg(j))) cosd(deg(j))];r*
[zeros(size(deg(j))) sind(deg(j))]]);
%%plot intersection points between lines and circles
plot(P(1,:),P(2,:),'or');
end
end
end
end
%%x and y axis limits
xlim([-0.2,1.2])
ylim([-0.2,1.2])
grid on
grid minor
I used the file exchange function InterX. It only draws the intersection points as the following image. But, I can't get these intersection points to store them in matrix or array.
So, my question is: How to get the intersection points between each line and the circles that intersected with that line and store them in array or matrix?? Any suggestions to modify this code??

Accedi per commentare.

 Risposta accettata

Matt J
Matt J il 17 Ago 2018
Modificato: Matt J il 17 Ago 2018
Can't you just modify as follows,
P{i,j} = InterX([x+C_M(index,1);y+C_M(index,2)],[r*[zeros(size(deg(j))) cosd(deg(j))];r*
[zeros(size(deg(j))) sind(deg(j))]]);
%%plot intersection points between lines and circles
plot(P{i,j}(1,:),P{i,j}(2,:),'or');

6 Commenti

Eman S
Eman S il 18 Ago 2018
Modificato: Eman S il 18 Ago 2018
@Matt J
Thanks so much for your answer. When I use your code, it gives me the output like that;
P =
Columns 1 through 2
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x2 double] [2x2 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
Columns 3 through 4
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x2 double] [2x2 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
Columns 5 through 6
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x2 double] [2x2 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
Columns 7 through 8
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x2 double] [2x2 double]
[2x2 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
Columns 9 through 10
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x2 double] [2x2 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
[2x0 double] [2x0 double]
To get the values, I must write like that; P{8,1}.
>> P{8,1}
ans =
0.84813 1.052
0 0
Is there any method to get the values instead of [2x0 double]??
Matt J
Matt J il 18 Ago 2018
The 2x0 contents are the values. I assume this means that no intersection was detected.
Eman S
Eman S il 18 Ago 2018
Modificato: Eman S il 18 Ago 2018
Yes, the 2x0 contents are the values and they are empty. But, the 2x2 contents have values, like;
P{8,1}= 0.84813 1.052
0 0
So, how to remove the 2X0 elements and get the values of 2x2 elements??
P(cellfun('isempty',P))=[];
But if you get rid of them, how will you know which circle/line pair a 2x2 value corresponds to?
This will give you a map of where the non-empty P{i,j} lie
map=~cellfun('isempty',P)
Eman S
Eman S il 18 Ago 2018
Modificato: Eman S il 18 Ago 2018
Thanks so much for your reply and your help.

Accedi per commentare.

Più risposte (0)

Categorie

Richiesto:

il 17 Ago 2018

Modificato:

il 2 Feb 2020

Community Treasure Hunt

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

Start Hunting!

Translated by