Comment calculer les points d'intersection de deux cercles avec Matlab ?

Cette page rpésente la fonction Matlab circlesIntersectionPoint().

circlesIntersectionPoints.m

Cette fonction calcule les coordonnées des points d'intersection de deux cercles. la fonction retourne les points d'intersection I1 et I2 après avoir vérifié que l'intersetion des cercles existe.

 [I1, I2, status] = circlesIntersectionPoints(P1, r1, P2, r2)

Code source

Le code ci-dessous implémente le calcul présenté sur cette page : Comment calculer les points d'intersection de deux cercles ?. here is the source code of the function:

function [I1, I2, status] = circlesIntersectionPoints(P1, r1, P2, r2)

I1=0;
I2=0;

%% Distance between centers
d = sqrt( (P2(1)-P1(1))*(P2(1)-P1(1)) + (P2(2)-P1(2))*(P2(2)-P1(2)) );

%% Check cases
if (d>r1+r2)
    % Circles are too far apart and do not intersect;
    status = -1;
    return
end

if (d<abs(r1-r2))
    % One circle is inside the other and do not intersect;
    status = -2;
    return
end

if (d==0 && r1==r2)
    % Circles are merged 
    status = -3;
    return
end

if (d==r1+r2)
    % Single intersection point;
    status = 1;
end

if (d<r1+r2)
    % Two intersection points.
    status = 1;
end

%% a and b
a = (r1*r1 - r2*r2 + d*d) / (2*d);
b = (r2*r2 - r1*r1 + d*d) / (2*d);

%% h
h=sqrt(r1*r1 - a*a);

%% P5
P5 = [ P1(1) + (a/d)*(P2(1)-P1(1)) , P1(2) + (a/d)*(P2(2)-P1(2)) ];

%% Intersection points
I1 = [ P5(1) - h*(P2(2)-P1(2))/d ; P5(2) + h*(P2(1)-P1(1))/d];
I2 = [ P5(1) + h*(P2(2)-P1(2))/d ; P5(2) - h*(P2(1)-P1(1))/d];
end

Exemple d'utilisation

Voici un exemple qui calcule les points d'intersection entre deux cercles :

%% Intersection entre deux cercles
%% More details at https://lucidar.me/fr/mathematics/how-to-calculate-the-intersection-points-of-two-circles
close all;
clear all;
clc;

%% Paramètre des cercles
P1=[3;4]; r1=3.4;
P2=[-1;2]; r2=2.6;

%% Dessin les cercles
drawCircle = @(C,R,color) plot ( C(1) + R*cos([0:0.01:2*pi]) , C(2) + R*sin([0:0.01:2*pi]), color );
figure;
hold on;
grid on;
axis square equal;
drawCircle(P1, r1, 'r');
drawCircle(P2, r2, 'g');

%% Points d'intersection
[I1, I2] = circlesIntersectionPoints(P1, r1, P2, r2);

plot (I1(1), I1(2), 'o');
plot (I2(1), I2(2), 'o');

Le code ci-dessus affiche la figure suivante:

Calcul de l'intersection de deux cercles avec Matlab

Aide

Voici l'aide de la fonction :

>> help circlesIntersectionPoints
  circlesIntersectionPoints  Compute the intersection points of two circle

    [I1, I2, status] = circlesIntersectionPoints(P1, r1, P2, r2)

 Input parameters

    P1 is the center of circle 1
    r1 is the radius of circle 1
    P2 is the center of circle 2
    r2 is the radius of circle 1

 Output parameters

    I1 and I2 are the coordinates of intersection points
    status is the status of the intersection:
        * -1 : Circles are too far apart and do not intersect;
        * -2 : One circle is inside the other and do not intersect;
        * -3 : Circles are merged , there are an infinite number of points
        * 1  : Single intersection point
        * 2  : two intersection points

 Usage example:

    [i1, i2, s] = circlesIntersectionPoints([3,4], 3.4, [-1,2], 2.6)

Téléchargement


Dernière mise à jour : 04/04/2023