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 \)".
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} $$
Les quatres points sont coplanaires, si et seulement si :
$$ \det( \: \vec{P_1P_2} \: , \: \vec{P_1P_3} \: , \: \vec{P_1P_4} \: ) = 0 $$
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;