Comment tester si quatre points sont coplanaires ?

Introduction

Le but de cet article est de vérifier si 4 points sont coplanaires, c'est à dire qu'ils appartiennent au même plan. Considérons quatre points \( P_1 \), \( P_2 \), \( P_3 \) et \( P_4 \) définis dans \( \mathbb{R}^3 \). La question peut être reformulée de la façon suivante : "est-ce que le point \( P_4 \) appartient au plan défini par les points \( P_1 \), \( P_2 \) et \(P_3 \)".

Tester si un point appartient à un plan en 3D

Démonstration

Commençons par calculer le vecteur normal au plan défini par les points \(P_1 \), \(P_2 \) et \(P_3 \):

$$ \vec{n_1}=\vec{P_1P_2} \times \vec{P_1P_3} $$

Calculons maintenant le vecteur normal au plan défini par les points \(P_1 \), \(P_2 \) et \(P_4 \):

$$ \vec{n_2}=\vec{P_1P_2} \times \vec{P_1P_4} $$

Si les quatre points appartiennent au plan, les vecteurs \(\vec{n_1} \) et \(\vec{n_2} \) sont colinéaires et cela peut être vérifié grâce au produit vectoriel des vecteurs normaux:

$$ \vec{n_1} \times \vec{n_2} =0 $$

La relation peut être reformulée :

$$ (\vec{P_1P_2} \times \vec{P_1P_3}) \times (\vec{P_1P_2} \times \vec{P_1P_4}) =0 $$

Puis simplifiée et l'on prouve que le point \( P_4 \) appartient au plan si :

$$ \det ( \vec{P_1P_2} , \: \vec{P_1P_3} , \:\vec{P_1P_4} ) = 0 $$

Preuve (références ici or ici ):

$$ \begin{align} (\vec{u} \times \vec{v}) \times (\vec{u} \times \vec{w}) &= ( (\vec{u} \times \vec{v}) \cdot \vec{w}) \vec{v} - ((\vec{u} \times \vec{v}) \cdot \vec{v}) \vec{w} \\ (\vec{u} \times \vec{v}) \times (\vec{u} \times \vec{w}) &= ( (\vec{u} \times \vec{v}) \cdot \vec{w}) \vec{v} \\ (\vec{u} \times \vec{v}) \times (\vec{u} \times \vec{w}) &= \det ( \vec{u} , \vec{v} , \vec{w} ) \vec{v} \end{align} $$

Conclusion

Les quatres points sont coplanaires, si et seulement si :

$$ \det( \: \vec{P_1P_2} \: , \: \vec{P_1P_3} \: , \: \vec{P_1P_4} \: ) = 0 $$

Code source Matlab

close all;
clear all;

%% 3 points for the plan
P1=[0;0;0];
P2=[1;0;1];
P3=[0;1;1];

%% Point to check
% Belong
P4=[2;2;4];
% Do not belong
%P4=[2;2;-2];

%% Display points and plane
plot3(0,0,0);
hold on;
grid on;
axis on;
patch ( [P1(1), P2(1), P4(1), P3(1)], [P1(2), P2(2), P4(2), P3(2)], [P1(3), P2(3), P4(3), P3(3)], 'red' );
plot3 (P1(1), P1(2), P1(3), '.', 'MarkerSize', 50);
plot3 (P2(1), P2(2), P2(3), '.', 'MarkerSize', 50);
plot3 (P3(1), P3(2), P3(3), '.', 'MarkerSize', 50);
plot3 (P4(1), P4(2), P4(3), '.', 'MarkerSize', 50);

%% Method 1: cross product
C = cross (cross(P2-P1, P3-P1), cross(P2-P1, P4-P1));
if (any(C)) 
    disp('P4 does not belong to the plane (cross product)');
else
    disp('P4 belongs to the plane (cross product)');
end;

%% Method 2: determinant 
D = det( [P2-P1, P3-P1, P4-P1]);
if (any(D)) 
    disp('P4 does not belong to the plane (determinant)');
else
    disp('P4 belongs to the plane (determinant)');
end;

Le point P4 n'appartient pas au plan P1, P2, P3

Voir aussi


Dernière mise à jour : 13/03/2022