Livre Mathgame
Livre Mathgame
M AT H É M AT I Q U E S
POUR LES JEUX VIDÉO
A L G O R I T H M E S E T M AT H É M AT I Q U E S
Exo7
Mathématiques pour les jeux vidéo
Bienvenue dans « Mathgame » !
L’univers du jeu vidéo est une source inépuisable de créativité, où chaque joueur peut explorer des mondes
virtuels uniques. Les possibilités sont infinies, mais derrière chaque aspect visuel et mécanique se cachent
des fondements mathématiques essentiels.
Dans ce livre, nous vous invitons à plonger dans les mécanismes fondamentaux qui font naître la magie des
jeux vidéo. Que vous soyez passionné de jeux, étudiant en sciences ou simplement curieux, ce livre vous
permettra de comprendre les principes mathématiques qui donnent vie aux mondes imaginaires que vous
explorez.
Des représentations en perspective d’objets, à l’application des textures pour les illuminer, en passant par
leur mise en mouvement ou les stratégies pour remporter la victoire, nous explorerons ensemble les concepts
mathématiques de base qui sont au cœur de chaque étape de la création d’un jeu.
Le contenu est accessible à tout étudiant ayant obtenu un bac scientifique. Vous pouvez lire les chapitres
dans l’ordre que vous voulez : la première partie est la plus mathématique, la deuxième partie est consacrée
à la construction des images, la troisième partie fournit des outils pour le mouvement, enfin la quatrième
partie introduit la théorie des jeux.
À vos manettes, prêts, partez !
Le livre, l’intégralité des codes ainsi que tous les fichiers sources sont sur la page GitHub d’Exo7 :
« GitHub : Mathgame ».
Sommaire
Résumé des chapitres
Trigonométrie
Savoir mesurer et calculer les angles est fondamental !
Vecteurs
Nous étudions les vecteurs du plan, de l’espace et en n’importe quelle dimension.
Matrices
Les matrices sont des tableaux de nombres très pratiques pour encoder des transformations du plan et de
l’espace.
Transformations de l’espace
Nous étudions les transformations affines usuelles de l’espace : translations, homothéties, réflexions. . . à l’aide
des vecteurs et matrices. Nous décrivons les formules de changement de base et introduisons les coordonnées
homogènes.
Rotations de l’espace
Nous étudions différentes façons d’obtenir une rotation de l’espace : en la décomposant par des rotations
élémentaires ou bien à l’aide des quaternions.
Perspective
Nous expliquons différentes façons de représenter l’espace 3D sur un plan 2D.
Lancer de rayons I
Nous abordons les bases du ray-tracing : nous lançons un rayon depuis une source et calculons en quel(s)
point(s) ce rayon atteint un objet géométrique (plan, triangle, sphère...).
Lumière
Comment une scène est-elle éclairée ? Quelle est la couleur des objets illuminés ?
Pixels
Comment tracer, pixel par pixel, les figures géométriques de base ?
Texture
Les textures permettent de rendre les objets 3D beaucoup plus réalistes en simulant la couleur et la forme d’une
matière. Il s’agit principalement de transformer un carré du plan en une surface de l’espace.
Lancer de rayons II
Nous expliquons en détail la technique du ray-tracing et présentons des outils pour accélérer cette méthode.
Triangulation
Nous découpons le plan en objets simples : des triangles.
Maillage
Cette fois nous découpons un objet de l’espace en figures géométriques simples.
Mouvement
Comment se déplacer dans le plan, dans l’espace, dans un labyrinthe, sur un terrain ?
Approximation et interpolation
L’approximation a pour but de modéliser une situation à l’aide d’une fonction simple. Avec une fonction simple,
les calculs sont plus rapides. L’interpolation modélise des données partielles par une fonction. On obtient ainsi
une fonction qui permet de prédire des valeurs manquantes.
Équations différentielles
Les équations différentielles apparaissent naturellement dans de nombreux domaines au-delà des mathématiques.
Elles permettent de modéliser des phénomènes d’évolution en physique, biologie, économie... Nous expliquons ici
comment trouver des solutions approchées de ces équations grâce à des méthodes numériques de discrétisation.
Fractales
Les fractales sont des formes géométriques auto-similaires : lorsque l’on zoome sur une partie, on retrouve
une image ressemblant à la figure globale. Les structures fractales permettent de dessiner des paysages et de
la végétation. La méthode est facile à implémenter, permet de générer aléatoirement une grande variété de
structures, utilise très peu de données, mais par contre nécessite des calculs.
Physique
Pour rendre des animations réalistes, il faut bien comprendre certains principes issus de la physique. Nous en
illustrons quelques-uns.
Minimax
L’algorithme minimax permet de choisir le meilleur coup à jouer en anticipant les mouvements de l’adversaire.
Sociologie du joueur
Quel est le comportement d’un joueur dans la « vraie vie » et quels sont les paramètres qui permettent de créer
un « bon » jeu ?
P R E M I È R E PA R T I E
GÉOMÉTRIE
1
Chapitre
Trigonométrie
1
(0, 1)
p p
− 12 , 23 1
2, 2
3
p p p p
− 22 , 22 π 2
2 , 2
2
2
2π π
p 3 3 p
− 23 , 12 3π
90◦
π 3 1
2 ,2
4 4
120◦ 60◦
5π π
6 135 ◦
45◦ 6
150◦ 30◦
(−1, 0) (1, 0)
π 180◦ 0◦ ◦
360 2π x
210◦ 330◦
7π 11π
6 225◦ 315◦ 6
p 5π
240◦ 300◦ 7π
p
− 3 1 270◦ 3 1
2 ,−2 4 4 2 ,−2
4π 5π
p p 3 3 p p
3π
− 22 , − 22 2 2
2
, − 2
2
p p
− 12 , − 2
3 1
2 , − 2
3
(0, −1)
La conversion entre les angles en degrés et en radians se fait par les formules suivantes :
θdegré
θradian = 2π
360
TRIGONOMÉTRIE 3
et
θradian
θdegré = 360 .
2π
Dans ce cours, nous utiliserons principalement le radian comme unité de mesure des angles.
y
T
1
M
sin(θ )
tan(θ )
θ x
O cos(θ ) 1
(0, 1)
1
p
3
π π π π 2, 2
x 0 π p
6 4 3 2 p
2 2
p p 2 π 2 , 2
3 2 1 3
cos(x) 1 0 π p
90◦
2 2 2 3 1
◦ 4 2 ,2
p p 60 π
1 2 3 45◦
sin(x) 0 1 6
2 2 2 30◦
1 p
tan(x) 0 p 1 3 (1, 0)
3
0◦ 0
1.3. Fonctions
La fonction cosinus x 7→ cos(x) est périodique de période 2π et elle est paire (donc symétrique par rapport
à l’axe des ordonnées). La fonction sinus x 7→ sin(x) est aussi périodique de période de 2π mais elle est
impaire (donc symétrique par rapport à l’origine).
y
+1
cos(x)
x
sin(x)
−π 0 π 2π 3π
−1
sin(x) x
−π − π2 0 π π
2
−1 cos(x)
tan(x)
y
+1
−π 0 π
− π2 π
2
3π
2
x
−1
2.1. Arcsinus
Considérons la fonction sin : R → [−1, 1], x 7→ sin(x). Pour obtenir une bijection à partir de cette fonction, il
faut considérer la restriction de sinus à l’intervalle [− π2 , π2 ]. Sur cet intervalle, la fonction sinus est continue
et strictement croissante, donc la restriction
sin| : [− π2 , + π2 ] → [−1, 1]
est bijective. Sa bijection réciproque s’appelle la fonction arcsinus :
arcsin : [−1, 1] → [− π2 , + π2 ]
y
π
2 arcsin(x)
y
+1 sin(x)
x x
−π − π2 0 π π −1 0 1
2
−1
− π2
2.2. Arccosinus
La restriction cos| : [0, π] → [−1, 1] est une bijection. Sa bijection réciproque est la fonction arccosinus :
arccos : [−1, 1] → [0, π]
y
arccos(x) π
y
+1
x
−π − π2 0 π π π
2
2
−1 cos(x)
x
−1 0 1
TRIGONOMÉTRIE 6
cos arccos(x) = x (x ∈ [−1, 1])
arccos cos(x) = x (x ∈ [0, π])
−1
arccos′ (x) = p (x ∈ ] − 1, 1[)
1 − x2
2.3. Arctangente
La restriction tan| : ] − π2 , + π2 [→ R est une bijection. Sa bijection réciproque est la fonction arctangente :
arctan : R → ] − π2 , + π2 [
y tan(x)
π y
2
arctan(x)
x 0 x
−π π
− π2 π
2
3π
2
− π2
tan arctan(x) = x (x ∈ R)
(x ∈ ] − π2 , + π2 [)
arctan tan(x) = x
i π πh
Si x ∈ − ,+ tan(x) = y ⇐⇒ x = arctan y
2 2
1
arctan′ (x) = (x ∈ R)
1 + x2
M (x, y)
y
#»
j θ
O #» x
i
TRIGONOMÉTRIE 7
Le cas fondamental est lorsque le point M (x, y) est situé dans le premier quadrant (x > 0 et y ⩾ 0) alors :
y
tan(θ ) = ,
x
donc y
θ = arctan .
x
Il faut adapter le calcul lorsque M (x, y) appartient aux autres quadrants, c’est ce que fait la fonction
arctan2( y, x) (attention à l’ordre des variables !). La fonction arctan2( y, x) est définie pour tout (x, y) ̸=
(0, 0) et renvoie l’angle θ ∈] − π, π] associé au point M avec un angle positif pour les points au-dessus de
l’axe des abscisses et un angle négatif en-dessous.
π
2
2π π
3 3
3π π
4 90◦ 4
5π
120◦ 60◦ π
6 6
150◦ 30◦
π 180◦ 0◦ 0
−150◦ −30◦
− 5π
6
− π6
◦ ◦
−120 −60
− 3π
4 −90◦ − π4
π
− 2π
3
− 3
− π2
y y y
La valeur arctan2( y, x) se calcule en fonction de arctan x , où x est la valeur absolue de x, selon le
schéma ci-dessous :
y
y π y
− arctan x +π 2 arctan x
x
π 0
− π2
y y
arctan x −π − arctan x
3. Coordonnées polaires
Plutôt que de repérer un point du plan R2 par ses coordonnées cartésiennes (x, y), on peut le faire au
moyen de sa distance à l’origine et de l’angle formé avec l’horizontale : ce sont les coordonnées polaires.
3.1. Définition
#» #»
Soit M un point du plan R2 . Soit O = (0, 0) l’origine. Soit (O, i , j ) un repère orthonormé direct.
−−→
• On note r = ∥OM ∥, la distance de M à l’origine.
#» −−→
• On note θ l’angle entre i et OM .
M = [r : θ ]
y = r sin(θ )
#» θ
j
O #» x = r cos(θ ) x
i
On note [r : θ ] les coordonnées polaires du point M . Dans ce cours, r sera positif. L’angle n’est pas
déterminé de manière unique, plusieurs choix sont possibles. Pour avoir l’unicité, on peut limiter θ à
l’intervalle ] − π, +π], ou bien [0, 2π[. On n’attribue généralement pas de coordonnées polaires au point
origine (l’angle n’aurait pas de sens).
3.2. Conversion
y
dans le cas x > 0 et y ⩾ 0, θ = arctan x , et dans le cas général
θ = arctan2( y, x).
3.3. Exemples
Exemple.
On considère un cercle fixe C centré à l’origine de rayon R, sur lequel roule (sans glisser) un autre cercle
C ′ de rayon r. Sur le cercle C ′ on choisit un point M . Quelle est la trajectoire de M lorsque le cercle C ′
roule sur C ?
C′
C
r
M
O R
Cette trajectoire s’appelle une épicycloïde, voici plusieurs allures de cette courbe en fonction du rapport
q = Rr .
1 2
q= q=
2 3 q=1
TRIGONOMÉTRIE 10
q=3 q=4
q=2
Notons C ′′ le cercle (fixe) de centre O et de rayon R + r. Le centre (mobile) P du cercle C ′ se déplace sur
#»
ce cercle C ′′ . Les coordonnées du vecteur OP, et donc de P, sont
#» (R + r) cos(θ )
OP = ,
(R + r) sin(θ )
#»
où l’on note θ l’angle entre l’horizontale et OP.
C′
θ′ P
C M
θ
O
C ′′
# »
Le vecteur P M a pour coordonnées
r cos(θ ′ )
# »
PM = ,
r sin(θ ′ )
# »
où θ ′ désigne l’angle formé entre P M et l’horizontale. Le roulement sans glissement permet de calculer
θ ′ en fonction de θ ; on donne ici directement la formule :
R+r
θ′ = π + θ.
r
# » #» # »
Ainsi, les coordonnées de OM = OP + P M , et donc du point M , sont :
(R + r) cos(θ ) − r cos R+r
# » r θ
OM = .
(R + r) sin(θ ) − r sin R+r
r θ
TRIGONOMÉTRIE 11
Exemple.
Lorsque R = 2r, c’est-à-dire le petit cercle roule sur un cercle de rayon deux fois plus grand (q = 2
ci-dessus), l’épicycloïde s’appelle la néphroïde (elle ressemble à un rein). Mais cette courbe (en fait juste
une moitié) a aussi la particularité d’être la caustique du cercle.
C’est la courbe visible à la surface du café dans une tasse éclairée par un point éloigné. La caustique
correspond aux points où il y a une concentration de lumière. D’un point de vue mathématique et optique,
des rayons lumineux parallèles se réfléchissent sur le cercle, la caustique est l’enveloppe des rayons réfléchis,
c’est-à-dire la courbe tangente aux rayons réfléchis. Ce sont des effets optiques en général très difficiles à
calculer, par exemple on ne peut pas les obtenir par ray-tracing.
rayon
Sur la figure ci-dessus : une source lumineuse est placée à l’infini à gauche, les rayons lumineux arrivent
parallèlement et horizontalement. Regardons la trajectoire du rayon incident (orange), il vient intersecter
le demi-cercle et se réfléchit ensuite (en bleu) en suivant la loi de réflexion de Descartes. Lorsqu’on fait
cela plusieurs fois, les rayons réfléchis dessinent le contour d’une courbe : la caustique.
Considérons un cercle C0 de rayon 4r, la caustique de ce cercle a pour équation paramétrique :
# » 3r cos(θ ) − r cos (3θ ) h π πi
OM = θ∈ − , .
3r sin(θ ) − r sin (3θ ) 2 2
TRIGONOMÉTRIE 12
a + ib
b
0 1 a R
p
• Le module de z = a + ib est le réel positif |z| = a2 + b2 . Il mesure la distance du point (a, b) à l’origine
(0, 0).
• Un nombre complexe z ∈ C, admet l’écriture trigonométrique :
z = r cos(θ ) + ir sin(θ ) avec r ∈ R+ et θ ∈R
iR
r = |z|
i
θ = arg(z)
0 1 R
4.2. Exemple
Exemple.
On considère un système composé de deux bras articulés, le premier peut tourner autour d’un point fixe,
le second tourne autour de l’extrémité du premier. Comment calculer la position de l’extrémité du second
bras ?
TRIGONOMÉTRIE 13
M1
θ2
r2
M2
r1
θ1
O x
Notons r1 et r2 les longueurs (fixes) des deux bras. Les paramètres variables sont les angles θ1 et θ2 entre
# »
chaque bras et l’horizontale. Le vecteur OM1 , et le point M1 , ont pour affixe :
z1 = r1 eiθ1 .
# »
Le vecteur M1 M2 a pour affixe :
z2 − z1 = r2 eiθ2 .
# »
Ainsi le vecteur OM2 , et le point M2 , ont pour affixe :
z2 = r1 eiθ1 + r2 eiθ2 .
Si on souhaite retourner aux coordonnées (x, y) de M2 , ce sont :
r1 cos(θ1 ) + r2 cos(θ2 )
.
r1 sin(θ1 ) + r2 sin(θ2 )
z 7→ z + z0
2. Réflexion horizontale. La réflexion par rapport à l’axe des abscisses correspond à la conjugaison
complexe.
z = x + i y 7→ z̄ = x − i y
TRIGONOMÉTRIE 14
z 7→ rz
4. Rotation. La rotation de centre l’origine et d’angle θ correspond à la multiplication par eiθ (un nombre
complexe de module 1).
θ
z 7→ eiθ z
O
5. Similitude. Une similitude directe est la composée d’une homothétie et d’une rotation (ici centrées à
l’origine). Elle correspond à la multiplication par un nombre complexe quelconque w = r eiθ avec r > 0,
où r est le rapport et θ l’angle.
z 7→ wz θ
O
y = r sin(θ )
z = z
TRIGONOMÉTRIE 15
z
M
r
θ
y
x
Ces coordonnées sont uniques lorsque r > 0 et θ ∈ ] − π, π[. Elles s’apparentent aux coordonnées polaires
avec en plus une hauteur z. Elles sont particulièrement adaptées lorsque la configuration possède un axe de
rotation. Les formules inverses sont similaires à celles pour les coordonnées polaires :
r = x2 + y2
p
θ = arctan2( y, x)
z = z
y = r cos(ϕ) sin(λ)
z = r sin(ϕ)
y
λ
Méridien d’origine
S
Équateur
Ces coordonnées sont uniques si r > 0, ϕ ∈ ] − π2 , π2 [, λ ∈ ] − π, π]. Attention ! Les notations et les choix
d’angles (latitude, colatitude. . .) diffèrent selon les sources.
TRIGONOMÉTRIE 16
ϕ = arcsin zr
λ = arctan2( y, x)
Chapitre
2
Vecteurs
1. Vecteurs du plan
#»
u
y
#»
j
O #» x
i
Deux vecteurs #»
u et #»
v sont colinéaires si #»
u = λ #»
v (ou bien #»
v = λ #»
u ) pour un certain scalaire λ ∈ R .
λ #»
u
#»
u + #»
v
#»
u
#»
v
− #»
u
1.2. Norme
La norme d’un vecteur #»
u = (x, y) est définie par
∥ #»
Æ
u ∥ = x 2 + y 2.
La norme mesure la distance entre le point (x, y) ∈ R2 et l’origine O = (0, 0).
#»
u
∥ #»
u∥
#»
u
1 x
#»
Soit #»
u un vecteur non nul quelconque. La normalisation de #»
u est le vecteur unitaire u
u ∥.
∥ #»
VECTEURS 19
#»
v
#»
u
θ
Cela entraîne :
Proposition 2.
#»
u et #»
v sont deux vecteurs orthogonaux si et seulement si #»
u · #»
v = 0.
#»
v
π
2
#»
u
− π2
Inversement cette formule permet de calculer l’angle (au signe près) entre deux vecteurs à l’aide du produit
#»
u · #»
v
scalaire : cos(θ ) = ∥ #»
u ∥ ∥ #» v ∥ . La fonction arccos permet de retrouver un angle (sans son signe), connaissant
son cosinus. Ainsi l’angle θ , en valeur absolue, vaut :
#» #»
u·v
|θ | = arccos #» #» .
∥u∥ ∥ v ∥
Exemple.
Quel est l’angle entre les vecteurs #»
u = (1, 2) et #»
v = (−1, 4) ?
VECTEURS 20
#»
v
#»
u
On a :
#» #»
• u · v =p1 × (−1) + 2 × 4 = 7.
#» p
• ∥ u ∥ = p12 + 22 = 5.
#» p
• ∥ v ∥ = (−1)2 + 42 = 17.
#» #» #» #» p 7
• Comme u · v = ∥ u ∥ ∥ v ∥ cos(θ ) alors cos θ = p .
5 17
7
• Enfin, θ = arccos p5p17 ≃ 0.708 radians. Soit θ ≃ 40,6◦ . (Attention au choix de l’unité d’angle sur
votre calculatrice !)
Exemple.
Fixons un vecteur #»
u . On considère le vecteur #»v qui est obtenu en tournant #»
u d’un angle θ dans le sens
trigonométrique. On a alors :
#»
u · #»
v = ∥ #»
u ∥ ∥ #»
v ∥ cos(θ ).
#» #»
• Le produit scalaire est donc nul si et seulement si cos θ = 0, c’est-à-dire lorsque u et v sont orthogo-
naux.
#» #»
• Le produit scalaire est maximal lorsque cos θ = 1, c’est-à-dire, u et v sont colinéaires, dirigés dans le
même sens.
#» #»
• Le produit scalaire est minimal lorsque cos θ = −1, c’est-à-dire, u et v sont colinéaires, dirigés dans
des sens opposés.
Ci-dessous un vecteur #»
u fixé et le signe du produit scalaire #»
u · #»
v pour différents vecteurs #»
v.
#»
u · #»
v =0
#»
u · #»
v <0 u #»
#» u · #»
v >0
#»
u · #»
v =0
VECTEURS 21
1.4. Applications
Vecteur normal à une droite.
La droite d’équation a x + b y + c = 0 admet pour vecteur directeur le vecteur #»
u = (−b, a). Ainsi un vecteur
#»
orthogonal à la droite est le vecteur n = (a, b) (on parle aussi de « vecteur normal », sans exiger qu’il soit
de norme 1). En effet le produit scalaire de #»
u et #»n est nul :
#» #»
u · n = (−b, a) · (a, b) = −ba + a b = 0.
#»
n=
a
b
ax + b y + c = 0
#» −b
u=
a
H
D
Démonstration. #» n = (a, b) est un vecteur orthogonal à la droite D. Notons H le projeté orthogonal de A sur
#»
la droite. La distance d cherchée est la distance AH. Calculons la valeur absolue du produit scalaire de HA
et #»
n de deux manières :
# » #»
• d’une part HA et n sont colinéaires, donc
#» #»
|HA · #»
n | = ∥HA∥ ∥ #»
p
n ∥ = d a2 + b2
• d’autre part, à l’aide des coordonnées :
# » #» xA − x H a
HA · n = · = (x A − x H )a + ( yA − yH )b = a x A + b yA + c
yA − yH b
On a utilisé que H est un point de la droite D donc a x H + b yH + c = 0.
On en déduit que :
|a x A + b yA + c|
d= p .
a2 + b2
Projection orthogonale.
Fixons un vecteur #»
u non nul quelconque. Nous pouvons décomposer n’importe quel vecteur #»
v en deux
parties :
#»
v = v# » + v# »// ⊥
où v# /»/ est colinéaire à #»
u et v# ⊥
» est orthogonal à #»
u.
VECTEURS 22
#»
v
v# ⊥
»
#»
u v#»
//
θ
A H
Le vecteur v# ⊥
» est alors :
#»
u · #»
v# ⊥
» = #»
v − v# /»/ = #»
v − #» 2 #»
v
u.
∥u∥
Exemple.
p
Soit #»
u = (3, 1). C’est un vecteur de norme ∥ #» u ∥ = 10. Soit #» v = (x, y) un vecteur quelconque. On a :
#»
u·v #» 1
v# /»/ = #» 2 #» u= (3x + y) #»u
∥u∥ 10
On pourrait calculer v# ⊥
» à l’aide de la formule #» v = v# /»/ + v# ⊥
».
#»′ #»
On peut aussi considérer u , un vecteur orthogonal à #» u , on a : u′ = (−1, 3). Le projeté orthogonal de #»
v
#» ′
sur u est :
#»′ #»
#v» = u · v u#»′ = 1 (−x + 3 y)u#»′
⊥ #» 10
∥u′ ∥2
#»
v
v# ⊥
»
#»
u
v#»
//
Intensité lumineuse.
L’intensité lumineuse arrivant en P sur un élément de surface est bien sûr proportionnelle à l’intensité i0
émise, mais elle dépend aussi de l’angle d’incidence.
Notons :
VECTEURS 23
#»
• ℓ : le vecteur unitaire issu de P dirigé vers la source lumineuse,
#»
• n : le vecteur unitaire orthogonal à la surface élémentaire.
.
#»
n
#»
ℓ .
.
P
Exemple. p
π
Considérons un angle d’incidence θ = 4 = 45◦ . Alors i = i0 cos π4 = i0 2
2 . L’intensité reçue est environ
70% de l’intensité émise.
#»
u
#»
k
#» y
#» j
i
x
#» #»
• Opérations. Pour u = (x, y, z) et v = (x ′ , y ′ , z ′ ) et λ ∈ R :
′
x + x′ λx
x x x
#» #»
u+ v = y + y = y+y
′ ′ #»
λ u = λ y = λ y
z z′ z + z′ z λz
• Le produit scalaire est défini par :
′
x x
#» #»
u · v = y · y ′ = x x ′ + y y ′ + zz ′ .
z z′
VECTEURS 24
#»
• La norme d’un vecteur u = (x, y, z) se calcule par :
∥ #»
u ∥ = #»u · #»
p Æ
u = x 2 + y 2 + z2.
#» #» #» #»
• Deux vecteurs u et v de l’espace sont orthogonaux si et seulement si u · v = 0.
#» #»
• L’angle θ (non orienté) entre deux vecteurs u et v s’obtient par la relation :
#»
u · #»
v
cos θ = #» #» .
∥u∥ ∥ v ∥
#»
u ∧ #»
v
#»
v
#»
u
Exemple.
Soient :
1 4
#»
u = 2
#»
v = 5
3 6
Alors :
1 4 2×6−3×5 −3
#» #»
u ∧ v = 2 ∧ 5 = 3×4−1×6 = 6
3 6 1×5−2×4 −3
Le triplet ( #»
u , #»
v , #»
u ∧ #»
v ) est un repère direct de R3 ( #»
u et #»
v n’ont pas besoin d’être orthogonaux). On
3 3
distingue un repère direct de R d’un repère indirect de R par la « règle de la main droite ».
z z
y x
x y
z
y
Proposition 4.
#» #» #» #»
• Le produit vectoriel u ∧ v est un vecteur orthogonal à u et à v .
• Sa norme vaut :
∥ #»
u ∧ #»
v ∥ = ∥ #»
u ∥ ∥ #»
v ∥ | sin θ |.
où θ est l’angle entre #»
u et #»
v.
#» #» #» #»
• La norme du produit vectoriel u ∧ v est égale à l’aire du parallélogramme formé par u et v .
#»
u ∧ #»
v
#»
v
#»
u
Exemple.
Soient #»
u = (2, −1, −2) et #»
v = (3, −1, 1).
1. Le produit vectoriel #»
w = #»
u ∧ #»
v est
2 3 −3
#»
w = −1 ∧ −1 = −8
−2 1 1
2. On peut vérifier que #»
w est orthogonal à #»
u et à #»
v . En effet : #»
u · #»
w = 0 et #»
v · #»
w = 0.
#» #»
3. L’aire du parallélogramme (de l’espace) formé par u et v est :
p
A = ∥ #»
Æ
w∥ = (−3)2 + (−8)2 + 12 = 74
Exemple.
Déterminons une équation a x + b y + cz + d du plan P contenant les trois points A(1, 0, 1), B(1, 3, 0) et
#»
C(2, 1, 2). Si n =
a
b est un vecteur normal à un plan alors une équation de ce plan est a x + b y +cz+d = 0.
c
#» #»
• On calcule les vecteurs AB = (0, 3, −1) et AC = (1, 1, 1).
#» # » # »
• On calcule le produit vectoriel n = AB ∧ AC = (4, −1, −3). C’est un vecteur normal au plan P . Ainsi
a = 4, b = −1, c = −3.
• On détermine d en utilisant les coordonnées d’un point du plan. Par exemple A ∈ P donc a x A + b yA +
czA + d = 0, donc a × 1 + b × 0 + c × 1 + d = 0, d’où d = −1.
• Conclusion : une équation du plan est 4x − y − 3z − 1 = 0.
VECTEURS 26
#»
w
#»
v
#»
u
Exemple.
Quel est le volume du parallélépipède formé par les vecteurs #»
u = (1, 1, 0), #»
v = (1, 1, 1) et #»
w = (1, 2, 3) ?
#»
w
#» #»
v
k
#» #»
j
i #»
u
#» #»
• On calcule le produit vectoriel v ∧ w = (1, −2, 1).
#» #» #» #» #» #»
• On calcule le produit mixte det( u , v , w) = u · ( v ∧ w) = 1 × 1 + 1 × (−2) + 0 × 1 = −1.
• Conclusion : le volume du parallélépipède est −1. Son volume géométrique vaut donc 1. (Le fait que
le volume algébrique soit négatif est dû au fait que les trois vecteurs forment une base indirecte.)
3. Cas général
Définition.
x 1 + y1
.
• Somme de deux vecteurs. Leur somme est par définition le vecteur u + v = .. .
x n + yn
λx 1
.
• Produit d’un vecteur par un scalaire. Soit λ ∈ R (appelé un scalaire) : λu = .. .
λx n
0
• Le vecteur nul de R est le vecteur 0 = ... .
n
x1 0 −x 1
.
• L’opposé du vecteur u = .. est le vecteur −u = .. .
.
xn −x n
Théorème 1.x y1 z1
1
. .
Soient u = .. , v = .. et w = ... des vecteurs de Rn et λ, µ ∈ R. Alors :
xn yn zn
1. u + v = v + u
2. u + (v + w) = (u + v) + w
3. u + 0 = 0 + u = u
4. u + (−u) = 0
5. 1u = u
6. λ(µu) = (λµ)u
7. λ(u + v) = λu + λv
8. (λ + µ)u = λu + µu
Chacune de ces propriétés découle directement de la définition de la somme et de la multiplication par
un scalaire. Ces huit propriétés font de Rn un espace vectoriel. Dans le cadre général, ce sont ces huit
propriétés qui définissent ce qu’est un espace vectoriel.
3.3. Coordonnées
Définition.
Les vecteurs
1 0 0
0 1 0
0 0 .
e1 = e2 = ··· en = ..
. .
.. ..
0
0 0 1
sont appelés les vecteurs de la base canonique de Rn .
x1
Les coordonnées usuelles d’un vecteur u = ... sont les coordonnées dans la base canonique, c’est-à-dire :
xn
u = x 1 e1 + x 2 e2 + · · · + x n en .
Mais on peut également exprimer des coordonnées du même vecteur u dans une autre base. Une base de
Rn est un ensemble B = ( f1 , f2 , . . . , f n ) de n vecteurs, tel que pour tout u ∈ Rn il existe des réels y1 , . . . , yn
uniques tels que
u = y1 f 1 + y2 f 2 + · · · + y n f n .
y1
.. s’appellent les coordonnées du vecteur u dans la base B.
.
yn B
Exemple.
#» #»
Soit B0 = ( i , j ) la base canonique de R2 (autrement dit (e1 , e2 )). Définissons
#» #»
3 −2
f1 = f2 = .
1 2
#» #»
Alors B = ( f1 , f2 ) est une base de R2 .
#» 1
Soit maintenant le vecteur u de coordonnées dans la base canonique, c’est-à-dire :
2
#» #» #»
u =1 i +2 j .
Quelles sont les coordonnées x de #»
y B u dans la base B ?
#» #»
f2 u
2
#»
f1
y
#» x
j
O #» 1
i
On veut écrire #»
u sous la forme :
#» #» #»
u = x f1 + y f2 .
On peut donc écrire, avec les coordonnées dans la base canonique :
1 3 −2
=x +y .
2 1 2
VECTEURS 29
On résout le système :
(
3x − 2 y = 1
x + 2y = 2
On obtient x = 3
4 et y = 85 . On en déduit que les coordonnées de #»
u dans la base B sont :
3
4
5
8 B
c’est-à-dire :
#» 3 #» 5 #»
u = f1 + f2 .
4 8
Certains paragraphes de la section « Cas général » sont extraits du livre Algèbre d’Exo7.
Chapitre
3
Matrices
Les matrices sont des tableaux de nombres très pratiques pour encoder des transformations du plan
et de l’espace.
1. Multiplication
1.1. Définition
Une matrice A est un tableau rectangulaire de nombres réels. Elle est dite de taille n × p si le tableau
possède n lignes et p colonnes. Les éléments de ce tableau sont appelés les coefficients de la matrice A. Le
coefficient situé à la i-ème ligne et à la j-ème colonne est noté ai, j (ou simplement ai j ).
a1,1 a1,2 . . . a1, j . . . a1,p
a
2,1 a2,2 . . . a2, j . . . a2,p
... ... ... ... ... ...
A= ou A = ai, j 1⩽i ⩽n ou ai, j .
ai,1 ai,2 . . . ai, j . . . ai,p 1⩽ j ⩽ p
... ... ... ... ... ...
an,1 an,2 . . . an, j . . . an,p
L’ensemble des matrices à n lignes et p colonnes à coefficients réels est noté Mn,p (R) ou simplement Mn,p .
Exemple.
4 −1
A= 2 5 ∈ M3,2 est une matrice 3 × 2 avec, par exemple, a1,1 = 4 et a3,2 = 0.
−1 0
1.2. Vecteurs
Vecteur ligne/vecteur colonne. Un vecteur de longueur n peut être à la fois vu comme un vecteur colonne
ou bien un vecteur ligne. Un vecteur colonne de longueur n est un cas particulier d’une matrice à n lignes et
1 colonne. Un vecteur ligne de longueur n est une matrice à 1 ligne et n colonnes.
x1
x
2
. ∈ Mn,1 x 1 x 2 · · · x n ∈ M1,n
..
xn
Matrice comme juxtaposition de vecteurs. Il est pratique de considérer qu’une matrice est la juxtaposition
de vecteurs colonnes. Plus précisément une matrice A ∈ Mn,p est composée de p vecteurs colonnes C1 , . . . , C p
chacun de longueur n.
MATRICES 31
Cj
a11 a12 ... a1 j ... a1p a11 a12 ... a1 j ... a1p
a21 a22 ... a2 j ... a2p a21 a22 ... a2 j ... a2p
... ... ... ... ... ...
... ... ... ... ... ...
ai1 ai2 ... ai j ... aip Li ai1 ai2 ... ai j ... aip
... ... ... ... ... ...
... ... ... ... ... ...
an1 an2 ... an j ... anp an1 an2 ... an j ... anp
Bien sûr on peut aussi considérer que cette même matrice est la superposition de n vecteurs lignes L1 , . . . , L n
chacune de longueur p.
Produit scalaire. Rappelons que le produit scalaire de u = (x 1 , . . . , x n ) et v = ( y1 , . . . , yn ), noté u · v (ou
parfois 〈u | v〉), est défini par
u · v = x 1 y1 + · · · + x n y n .
Expliquons le produit scalaire u · v en termes de vecteur ligne/vecteur colonne : on considère u comme un
vecteur ligne et v comme un vecteur colonne, puis on multiplie entre eux les deux premiers coefficients,
ensuite on multiplie entre eux les deuxièmes coefficients, etc. Le produit scalaire est la somme de tous ces
produits.
y1
y2
..
.
yi
..
.
yn
x1 x2 ... xi ... xn
Multiplication d’une matrice par un vecteur. Soit A ∈ Mn,p une matrice ayant n lignes et p colonnes. Soit
X un vecteur de longueur p, considéré comme un vecteur colonne. Le produit AX est un vecteur colonne Y
de longueur n défini ainsi :
a11 . . . a1p x1 a11 x 1 + a12 x 2 + · · · + a1p x p
a21 . . . a2p x2 a21 x 1 + a22 x 2 + · · · + a2p x p
= .
.. .. .. ..
. . . .
an1 . . . anp xp an1 x 1 + an2 x 2 + · · · + anp x p
| {z } | {z } | {z }
A X Y
Considérons A comme une superposition de vecteur lignes L1 , . . . , L n . Le premier coefficient de Y = AX est
en fait le produit scalaire L1 · X , le deuxième coefficient est L2 · X ,. . .
MATRICES 32
X
x1
..
.
xi
..
.
xp
Li · X
a11 ... a1 j ... a1p y1
... ... ... ... ... ..
.
yi = L i · X
Li ai1 ... ai j ... aip yi
... ... ... ... ... ..
.
an1 ... an j ... anp
yn
Il faut bien comprendre que le vecteur X est de longueur p mais le vecteur Y est de longueur n. Ainsi une
matrice A correspond à une transformation : X 7→ Y = AX .
Exemple.
La matrice de la rotation d’angle θ (centrée à l’origine) est :
cos θ − sin θ
Rθ =
sin θ cos θ
Notons
x
X= et Y = Rθ X
y
On calcule :
x cos θ − y sin θ
Y=
x sin θ + y cos θ
MATRICES 33
p
X
ci j = aik bk j
k=1
Li
ci j = C
A=
Exemple.
2 0
1 5 −1
A= B = 1 3
4 0 2
−1 1
On dispose d’abord le produit correctement (ci-dessous à gauche) : la matrice obtenue sera de taille
2 × 2. Puis on calcule chacun des coefficients, en commençant par le premier coefficient c11 = L1 · C1 =
1 × 2 + 5 × 1 + (−1) × (−1) = 8 (au milieu), puis les autres (à droite).
2 0 2 0 2 0
1 3 1 3 1 3
−1 1 −1 1 −1 1
1 5 −1 c11 c12 1 5 −1 8 c12 1 5 −1 8 14
4 0 2 c21 c22 4 0 2 c21 c22 4 0 2 6 2
MATRICES 34
8 14
Ainsi AB = .
6 2
1.4. AB ̸= BA
Le produit de matrices n’est pas commutatif. Même dans le cas où AB et BA sont définis et de la même taille,
on a en général AB ̸= BA.
Exemple.
1 4 0 2 8 22 0 2 1 4 4 −6
= mais = .
2 −3 2 5 −6 −11 2 5 2 −3 12 −7
Exemple.
5 8 4 0 9 8
Si A= et B= alors A+ B = .
−1 2 3 3 2 5
Par contre souvenez-vous que AB et BA sont en général deux matrices différentes. Si on fait bien attention à
l’ordre alors l’addition et la multiplication se comportent bien :
A(BC) = (AB)C (associativité)
A(B + C) = AB + AC et (B + C)A = BA + CA (distributivité)
En particulier pour un vecteur X et deux matrices A, B, on peut écrire Y = ABX qui se calcule indifféremment
par Y = (AB)X ou Y = A(BX ).
Il est aussi facile de multiplier une matrice par un facteur α ∈ R : le produit d’une matrice A = ai j de Mn,p
par un scalaire α ∈ R est la matrice αai j formée en multipliant chaque coefficient de A par α. Elle est
notée α · A (ou simplement αA).
Exemple.
4 3 2 8 6 4
Si A= et α=2 alors αA = .
2 −1 0 4 −2 0
−4 −3 −2
La matrice −A c’est (−1)A. Sur l’exemple ci-dessus on obtient : −A = .
−2 1 0
MATRICES 35
Il s’écrit :
AX = B
où
a11 . . . a1p x1 b1
a21 . . . a2p x2 b2
= .
.. .. .. ..
. . . .
an1 . . . anp xp bn
| {z } | {z } | {z }
A X B
La matrice A ∈ Mn,p s’appelle la matrice des coefficients du système ; B ∈ Mn,1 est le vecteur du second
membre ; le vecteur X ∈ M p,1 est une solution du système si et seulement si AX = B.
2. Vocabulaire
0 0 ... 1
La matrice identité joue le rôle de l’unité pour la multiplication des matrices (comme la valeur 1 pour la
multiplication des réels). Soit A ∈ Mn,p :
A × Ip = A et In × A = A
La matrice (de taille n × p) dont tous les coefficients sont des zéros est appelée la matrice nulle et est notée
0n,p ou plus simplement 0. Dans le calcul matriciel, la matrice nulle joue le rôle du nombre 0 pour les réels.
MATRICES 36
On dit que A est triangulaire supérieure si ses éléments en-dessous de la diagonale sont nuls, elle a la
forme suivante :
a11 a12 . . . . . . . . . a1n
0 a
22 . . . . . . . . . a2n
. .. .. ..
.. . . .
. .. .. ..
.. . . .
.. .. .. ..
. . . .
0 . . . . . . . . . 0 ann
Une matrice est diagonale lorsque elle est à la fois triangulaire inférieure et triangulaire supérieure.
Autrement dit en dehors de la diagonale tous les coefficients sont nuls.
Exemple.
Une matrice triangulaire inférieure (à gauche), une matrice triangulaire supérieure (au centre), une
matrice diagonale (à droite) :
3 0 0 2 3 −4 4 0 0
0 1 0 0 0 −2 0 −4 0
−1 5 −3 0 0 7 0 0 8
2.3. Transposée
Soit A la matrice de taille n × p
a11 a12 . . . a1p
a21 a22 . . . a2p
A= .
.. .. ..
. . .
an1 an2 . . . anp
T
La matrice transposée de A, notée A est la matrice de taille p × n définie par :
a11 a21 . . . an1
12 a22 . . . an2
a
AT = . .. .. .
.. . .
a1p a2p . . . anp
Autrement dit : le coefficient à la place (i, j) de A est a ji . Ou encore la i-ème ligne de A devient la i-ème
T
Exemple.
T
1 2 3 1 4 7
4 5 6 = 2 5 8
7 8 9 3 6 9
T
1 8 5
0 −5 = 1 0 −2
(5 3 − 1) T = 3
8 −5 3
−2 3 −1
3. Transformations du plan
Voyons comment les matrices permettent de décrire beaucoup de transformations du plan. Dans les chapitres
suivants « Transformations de l’espace » et « Rotations de l’espace » nous passerons à la dimension supérieure.
Une transformation affine du plan est l’application F : R2 → R2 définie par :
x a b x e
7→ + ,
y c d y f
où a, b, c, d, e, f sont des réels quelconques.
En d’autres termes, l’image d’un point (x, y) du plan est le point F (x, y) = (x ′ , y ′ ) avec
′
x = ax + b y + e
.
y′ = c x + d y + f
En fait, une transformation affine F est la composée d’une transformation linéaire
x x a b
7→ A où A =
y y c d
suivie d’une translation
x x e
7→ +B où B = .
y y f
Voici quelques transformations élémentaires.
MATRICES 38
Exemple.
1. Translation.
x x e
7→ +
y y f
2. Rotation.
La rotation de centre l’origine et d’angle θ est l’application
de R2 dans R2 définie par
cos θ − sin θ
x x
7→
y sin θ cos θ y
θ
Autrement dit : O
x cos θ − y sin θ
x
7→
y x sin θ + y cos θ
3. Homothétie.
L’homothétie de centre l’origine et de rapport k ∈ R \ {0}
est l’application de R2 dans lui-même définie par :
x kx
7→
y ky
En termes de matrice, l’écriture est la suivante :
x k 0 x
7→
y 0 k y
4. Réflexion.
Nous commençons par regarder la réflexion par rapport
à l’axe des abscisses : c’est l’application de R2 dans R2
définie par
x x
7→
y −y
En termes de matrice, l’écriture est la suivante :
x 1 0 x
7→
y 0 −1 y
Plus généralement l’expression d’une réflexion par rapport
à un axe passant par l’origine et faisant un angle θ2 avec
l’axe des abscisses est
cos θ sin θ
x x
7→
y sin θ − cos θ y
5. Projection sur un axe.
(x, y)
Pour M = 10 00 et e = f = 0. La transformation affine est
alors la projection (x, y) 7→ x.
x
MATRICES 39
Exemple général
(0, 1)
(b, d)
(a, c)
(0, 0) (1, 0)
Remarquer que sur ce dessin, un côté vertical du carré est envoyé sur un petit côté du parallélogramme, et
un côté horizontal sur un grand côté. Ni les longueurs ni les proportions ne sont conservées. Voici notre
personnage et sa déformation :
Déterminant
Soit F une transformation affine de matrice A = ac db . Le déterminant det(A) = ad − bc de cette matrice
joue un rôle particulièrement important dans l’étude la transformation affine F .
Proposition 1.
La transformation F est bijective si et seulement si det(A) ̸= 0.
Proposition 2.
Si E est un ensemble dont l’aire vaut A alors F (E) est un ensemble dont l’aire vaut | det(A)| × A.
MATRICES 40
4. Inverse
−1 1 d −b
A = ad−bc
−c a
Nous n’expliquerons pas ici comment calculer l’inverse d’une matrice en général.
Proposition 4.
1. Soit A une matrice inversible. Alors A−1 est aussi inversible et on a :
(A−1 )−1 = A
(AB)−1 = B −1 A−1
Pour l’inverse d’un produit il faut bien faire attention à l’inversion de l’ordre !
X = A−1 B
Les matrices sont un vaste sujet, ici nous avons présenté les notions indispensables à ce livre, mais vous trouverez
plein d’autres propriétés (comme par exemple comment calculer l’inverse) dans n’importe quel ouvrage d’algèbre
linéaire, par exemple le tome Algèbre d’Exo7 dont certains paragraphes de ce chapitre sont tirés.
Chapitre
Transformations de l’espace
4
Nous étudions les transformations affines usuelles de l’espace : translations, homothéties, réflexions. . .
à l’aide des vecteurs et matrices. Nous décrivons les formules de changement de base et introduisons
les coordonnées homogènes.
1. Transformations affines
1.1. Translations
Une translation de vecteur (a, b, c) est la fonction de R3 dans R3 définie par
′
x +a
x x x a
y 7−→ y ′ = y + b = y + b
z z′ z c z+c
a x
Si on note T = b alors, l’image Y d’un point X = y est :
c z
Y = X + T.
y
x
1.2. Homothéties
Une homothétie centrée à l’origine et de rapport k est l’application R3 → R3 , X 7→ Y définie par
Y = kX
′ ′ ′
Autrement dit x = k x, y = k y, z = kz. Nous préférons écrire les transformations en termes de vecteurs et
matrices :
k 0 0
Y = AX avec A = 0 k 0 .
0 0 k
TRANSFORMATIONS DE L’ESPACE 42
y
x
x0
Si on souhaite une homothétie de rapport k centrée en un point quelconque X 0 = y0 , alors on applique
y
0
la formule :
Y = A(X − X 0 ) + X 0 .
Pour déformer l’espace avec des rapports différents selon chaque axe (ce n’est plus une homothétie), on
utiliserait la matrice :
kx 0 0
A = 0 ky 0 .
0 0 kz
x y
1.3. Rotations
Les rotations seront étudiées en détail dans le chapitre « Rotations de l’espace ».
Par exemple la rotation d’axe (O x) et d’angle θ est la transformation Y = R x (θ )X avec
1 0 0
R x (θ ) = 0 cos(θ ) − sin(θ ) .
0 sin(θ ) cos(θ )
y
Rx
Une rotation d’angle π (180◦ ) s’appelle un retournement. Le retournement d’axe (O x) a pour matrice :
1 0 0
R x (π) = 0 −1 0 .
0 0 −1
TRANSFORMATIONS DE L’ESPACE 43
R y (θ ) = 0 1 0 Rz (θ ) = sin(θ ) cos(θ ) 0 .
− sin(θ ) 0 cos(θ ) 0 0 1
1.4. Projections
Les projections seront étudiées en détail dans le chapitre « Perspective ».
Par exemple la projection orthogonale sur le plan (O x y) est la transformation Y = AX avec
1 0 0
A = 0 1 0 .
0 0 0
y
x
1.5. Réflexions
La réflexion orthogonale par rapport au plan (O x y) est la transformation Y = AX avec
1 0 0
A = 0 1 0 .
0 0 −1
x
TRANSFORMATIONS DE L’ESPACE 44
Plus généralement si A est la matrice d’une projection sur un sous-espace, alors B = 2A − I est la matrice de
la réflexion par rapport à ce même sous-espace.
Une transformation affine est une transformation vectorielle, suivie d’une translation :
Y = AX + T avec A ∈ M3 (R), T ∈ M3,1 (R).
Une transformation vectorielle envoie toujours l’origine sur l’origine, à la différence d’une transformation
affine.
y
x
Les matrices permettent d’effectuer facilement la composition des transformations vectorielles. Si F a pour
matrice A et G a pour matrice B, alors la transformation F ◦ G (l’action de G suivie de celle de F ) a pour
matrice le produit AB. C’est-à-dire : F ◦ G : X 7→ Y = (AB)X . On rappelle que l’ordre a une importance, les
matrices AB et BA sont en général distinctes, autrement dit, appliquer F puis G n’est pas la même chose
qu’appliquer G puis F .
2. Changement de repère
#»
f1
#»
f2
e#»2
e#»1 #»
f3
Notez bien l’ordre ! La formule permet de calculer les coordonnées dans la base de départ à partir de celle
de la base d’arrivée. Mais en général on veut l’opération inverse. Pour cela on utilise simplement la relation
X ′ = P −1 X qui donne les coordonnées dans la nouvelle base à partir des coordonnées dans l’ancienne
base.
TRANSFORMATIONS DE L’ESPACE 46
Exemple.
Considérons R3 muni de sa base canonique B, mais aussi d’une autre base B′ avec :
1 0 0 1 0 1
′
B= 0 , 1 , 0
et B = 1 , 2 , 2 .
0 0 1 0 1 3
Quelle est la matrice de passage de B vers B′ ?
Comme la base de départ est la base canonique alors dans ce cas la matrice de passage est simplement la
matrice dont les colonnes sont les vecteurs de la base B′ , ainsi :
1 0 1
P = 1 2 2
0 1 3
Nous aurons besoin de calculer son inverse. Après calculs :
4 1 −2
1
P −1 = −3 3 −1
5
1 −1 2
Considérons un vecteur dont les coordonnées dans la base B sont :
5
X = 6
8
Quelles sont les coordonnées X ′ de ce même vecteur dans la base B′ ? Comme X = P X ′ alors X ′ = P −1 X ,
ainsi :
4 1 −2 5 2
1
X ′ = P −1 X = −3 3 −1 6 = −1 .
5
1 −1 2 8 3
Y = AX
Très souvent, la base choisie est la base canonique et alors on définit une application linéaire par sa matrice.
Mais la relation est en général plus subtile :
Donc dans une autre base B′ , la matrice de F est différente : notons B cette matrice. Comment exprimer B
en fonction de A?
La formule de changement de base pour une application linéaire est :
Proposition 4.
B = P −1 AP
Exemple.
Reprenons les deux bases de R3 de l’exemple du paragraphe 2.1 :
1 0 0 1 0 1
′
B= 0 , 1 , 0
et B = 1 , 2 , 2 .
0 0 1 0 1 3
Considérons la rotation F d’axe (Oz) et d’angle π2 . Sa matrice dans la base B est
0 −1 0
A = 1 0 0
0 0 1
Autrement dit, dans la base B un vecteur de coordonnées X s’envoie sur le vecteur de coordonnées Y = AX .
Quelle est la matrice B de cette même rotation, mais dans la base B′ ? On cherche la matrice B telle
que dans la base B′ cette fois un vecteur de coordonnées X ′ s’envoie sur les coordonnées Y ′ = BX ′ . La
formule de changement de base pour les matrices est B = P −1 AP, donc :
4 1 −2 0 −1 0 1 0 1 −3 −10 −13
1 1
B = P −1 AP = −3 3 −1 1 0 0 1 2 2 = 6 5 6 .
5 5
1 −1 2 0 0 1 0 1 3 −2 0 3
5
Par exemple, pour un vecteur ayant pour coordonnées X ′ = 0 dans la base B′ , alors son image par la
−29 10
rotation F aura pour coordonnées Y ′ = BX ′ = 18 (toujours dans la base B′ ).
4
e#»3 #»
f3
#»
f2
e#»2
e#»1
#»
f1
Il faut aussi prendre garde qu’une transformation vectorielle ne préserve en général pas l’orthogonalité
(même si c’est vrai pour les homothéties, les rotations, les symétries orthogonales).
Proposition 6.
Soit A la matrice d’une application linéaire F . Si A est une matrice orthogonale alors F préserve le produit
scalaire, c’est-à-dire F ( #»
u ) · F ( #»
v ) = #»
u · #»
v . En particulier F préserve les angles et les longueurs ; ainsi F préserve
l’orthogonalité et envoie une base orthonormale sur une base orthonormale.
Conséquence : si dans une base orthonormée F a pour matrice la matrice orthogonale A, alors dans une autre
base orthonormée F a pour matrice B qui est aussi orthogonale (c’est B = P −1 AP avec A et P orthogonales).
Exercice.
On considère la matrice
2 −1 2
1
A = −1 2 2
3
2 2 −1
1. Vérifier que A−1 = AT , en déduire que A est une matrice orthogonale.
2 2
2. Montrer que les vecteurs de coordonnées X 1 = 3 et X 2 = 1 sont orthogonaux.
7 −1
3. Calculer les coordonnées Y1 = AX 1 de l’image de X 1 par A. Idem pour Y2 = AX 2 . Vérifier que Y1 et Y2
sont encore des vecteurs orthogonaux.
3. Coordonnées homogènes
3.1. Motivation
Il y a plusieurs inconvénients à la description des transformations vues lors des sections précédentes : la
plupart des transformations étudiées jusqu’ici étaient des transformations vectorielles (où l’origine s’envoie
sur l’origine) et les translations sont effectuées à part afin d’obtenir une transformation affine. D’autre part
les ordinateurs savent multiplier très rapidement des matrices (pour composer les applications linéaires),
mais les translations requièrent un traitement à part (une addition). Pourrait-on unifier la situation ? Un
autre problème est de manipuler des objets à l’infini. Par exemple, pour un éclairage, il faut différencier un
éclairage issu d’un point, d’un éclairage « à l’infini » comme le Soleil. Encore une fois : comment unifier
cette situation ?
Ces deux problèmes sont réglés par les coordonnées homogènes. Il s’agit d’ajouter une coordonnée sup-
plémentaire, ainsi un point de l’espace est codé avec 4 nombres réels et une transformation qui inclut
une translation est codée à l’aide d’une matrice 4 × 4. Les points à l’infini sont les points dont la dernière
coordonnée est nulle.
Pour mieux comprendre et pouvoir faire des dessins on commence par expliquer les coordonnées homogènes
du plan.
On note (x : y : w) les coordonnées homogènes du plan où x, y, w sont des réels (pas tous les trois nuls en
même temps). Ces coordonnées sont définies à un facteur près, c’est-à-dire que :
• Si (x, y) ∈ R2 est un point du plan alors on lui associe les coordonnées homogènes (x : y : 1).
• Réciproquement à (x : y : w) avec w ̸= 0, on lui associe le point (x/w, y/w). Noter que si w ̸= 0 on a
(x : y : w) = (x/w : y/w : 1).
• Si (vx , v y ) est un vecteur du plan, on lui associe les coordonnées homogènes (vx : v y : 0), aussi appelé
« point à l’infini ». Réciproquement à (vx : v y : 0), on associe le vecteur (ou la direction) (vx , v y ).
Pour décrire le plan projectif d’un point de vue géométrique, on part de l’espace R3 et on identifie les points
qui sont situés sur une même droite passant par l’origine (car (x : y : w) = (λx : λ y : λw)).
L’identification (x : y : 1) avec le point (x, y) correspond à intersecter une droite vectorielle de l’espace
avec le plan d’équation (w = 1).
.
(λx : λ y : λ)
. (x : y : 1)
plan (w = 1)
y
x
Points à l’infini
On peut se représenter le plan projectif ainsi : une partie affine correspondant aux points de coordonnées
homogènes (x : y : 1) et un ensemble de points à l’infini de coordonnées homogènes (vx : v y : 0). Un point
à l’infini (vx : v y : 0) correspond à une direction #»
v = (vx , v y ).
(1 : 0 : 0)
. (vx : v y : 0)
y
.
. (x : y : 1)
x
.(1 : 0 : 0)
Voyons maintenant comment uniformiser la position d’un éclairage. La source d’un éclairage est définie par
un point S ∈ RP 2 de coordonnées homogènes (x S : yS : wS ) avec wS = 0 ou bien wS = 1.
• Lumière ponctuelle. S = (x S : yS : 1). Dans ce cas la source lumineuse est en position (x S , y#S»). Si
P(x, y) est un point du plan, alors un vecteur unitaire dirigé vers la source lumineuse est ℓ P = ∥ PS#» .
PS∥
• Lumière directionnelle. S = (x S : y S : 0). Dans ce cas la source lumineuse est « à l’infini » et est
#» #»
v
caractérisée par la direction opposée à v = (x S , yS ). Pour n’importe quel point P du plan, ℓ = ∥ #» v ∥ est
un vecteur unitaire dirigé parallèlement aux rayons lumineux.
TRANSFORMATIONS DE L’ESPACE 50
#»
.ℓP
#»
− #»
v
P
.
ℓP
Transformation
Problème de la composition
Composer deux transformations vectorielles est simple : si F a pour matrice A et G a pour matrice B alors
F ◦ G a pour matrice AB. La composition correspond simplement au produit de matrices.
Faisons maintenant le calcul avec des transformations affines F : X 7→ AX + T et G : X 7→ BX + S :
F ◦ G(X ) = F G(X ) = F BX + S = A(BX + S) + T = ABX + (AS + T ).
La formule n’est donc pas simple et se compliquerait encore si ajoutait des compositions.
Calculons l’action de la transformation F : X 7→ AX + T en coordonnées homogènes.
x
x
À X= on associe X h = y .
y
1
Et à la transformation affine (de matrice A et translation T ) on associe la matrice :
a b e
Ah = c d
f
0 0 1
x
Vérifions que F (X h ) = Ah X h (en identifiant un point Ph = y avec (x : y : 1) et (x, y)) :
1
ax + b y + e
a b e x
Ah X h = c d f y = c x + d y + f = F (X h ).
0 0 1 1 1
TRANSFORMATIONS DE L’ESPACE 51
Ainsi en coordonnées homogènes, une transformation affine du plan correspond à la multiplication par une
matrice 3 × 3.
Si G : X 7→ BX + S est une autre transformation affine et que l’on note Bh la matrice 3 × 3 associée, alors
F ◦ G(X h ) = F G(X ) = F Bh X h = Ah (Bh X h ) = (Ah Bh )X h .
Ainsi, en coordonnées homogènes, la matrice associée à F ◦ G est naturellement le produit Ah Bh .
Coordonnées homogènes
On note (x : y : z : w) les coordonnées homogènes de l’espace, où x, y, z et w sont des réels, pas tous les
quatre nuls en même temps. Ces coordonnées sont définies à un facteur multiplicatif près, c’est-à-dire que :
L’ensemble de ces éléments (x : y : z : w), à équivalence près, s’appelle l’espace projectif , noté RP 3 .
Les coordonnées classiques correspondent aux coordonnées homogènes lorsque w = 1. Plus précisément :
• Si X = (x, y, z) ∈ R3 est un point de l’espace alors on lui associe les coordonnées homogènes X h = (x :
y : z : 1).
• Réciproquement à (x : y : z : w) avec w ̸= 0, on lui associe le point (x/w, y/w, z/w). Noter que si w ̸= 0
on a (x : y : z : w) = (x/w : y/w : z/w : 1).
• Si (vx , v y , vz ) est un vecteur, on lui associe les coordonnées homogènes (vx : v y : vz : 0), aussi appelé « un
point à l’infini ». Réciproquement à (vx : v y : vz : 0), on associe le vecteur (ou la direction) (vx , v y , vz ).
Exemple.
1. Le point Ā ∈ RP 3 de coordonnées homogènes (−3 : 0 : 2 : 1) a aussi pour coordonnées homogènes
(−6 : 0 : 4 : 2). Le point A ∈ R3 correspondant est (−3, 0, 2).
2. Le point B̄ ∈ RP 3 de coordonnées (2 : 3 : −2 : 1) est associé à B ∈ R3 de coordonnées (2, 3, −2).
3. Lorsque les coordonnées homogènes sont normalisées avec w = 1 on peut soustraire deux points pour
obtenir un vecteur :
B̄ − Ā = (2 : 3 : −2 : 1) − (−3 : 0 : 2 : 1) = (5 : 3 : −4 : 0)
#»
qui est un point à l’infini et correspond bien aux coordonnées homogènes du vecteur AB.
Il est difficile de visualiser l’espace projectif. Un premier point de vue est de partir de l’espace R4 (à quatre
dimensions) et d’identifier les points qui sont situés sur une même droite vectorielle. Une autre vision est de
considérer que RP 3 correspond à l’ensemble des points de R3 auxquels on rajoute des points à l’infini (qui
sont en fait en bijection avec le plan projectif RP 2 ).
Transformations homogènes
A T
Ah = ∈ M4 (R)
0 1
Autrement dit, si
a11 a12 a13 t1
a11 a12 a13 t1 a21 a22 a23 t2
A = a21
a22 a23 et T = t2
alors Ah =
a31
.
a32 a33 t3
a31 a32 a33 t3
0 0 0 1
Vérifions que F (X h ) = Ah X h :
a11 x + a12 y + a13 z + t 1
a11 a12 a13 t1 x
y = a21 x + a22 y + a23 z + t 2 = F (X ).
a21 a22 a23 t2
Ah X h = h
a31 a32 a33 t 3 z a31 x + a32 y + a33 z + t 3
0 0 0 1 1 1
Ainsi, en coordonnées homogènes, une transformation affine de l’espace correspond à la multiplication par
une matrice 4 × 4.
Exemple.
Soit Ah la matrice homogène d’une transformation F (X ) = AX + T définie par :
1 0 −1 1
2 1 0 2
−2 1 1 3 .
0 0 0 1
1. Calculons l’image d’un point de coordonnées X = (4, −2, 3) par la transformation F .
Ses coordonnées homogènes sont X h = (4 : −2 : 3 : 1). Alors :
1 0 −1 1 4 2
2 1 0 2 −2 8
Yh = Ah X h =
−2 1 1 3 3 = −4 .
0 0 0 1 1 1
Donc l’image de X est le point de coordonnées Y = (2, 8, 4).
2. Si pour le même point X on avait choisi les coordonnées homogènes X h′ = (8 : −4 : 6 : 2) alors on
aurait obtenu
4
16
Yh = Ah X h′ =
−8
2
Mais (4 : 16 : −8 : 2) = (2 : 8 : −4 : 1) et on retrouve les mêmes coordonnées Y = (2, 8, −4) ∈ R3 .
3. Soit un point à l’infini de coordonnées homogènes X h = (vx : v y : vz : 0). Son image
vx −vz
2v x +v y
Yh = Ah X h = −2v x +v y +vz
0
est aussi un point à l’infini. C’est un phénomène général : un point à l’infini est envoyé sur un point à
l’infini. Noter qu’en effectuant le calcul, on s’aperçoit que l’image d’un point à l’infini n’est pas affectée
par la translation associée à T mais uniquement par la transformation vectorielle associée à A.
TRANSFORMATIONS DE L’ESPACE 53
Composition
Exemple.
Soit F une rotation d’axe (Oz) et d’angle π2 suivie de la translation de vecteur (1, 2, 1). Soit G la symétrie
orthogonale par rapport au plan (O yz) suivie d’une translation de vecteur (1, 1, 0).
1. Matrices de F et G.
0 −1 0 1 1 0 0 1
1 0 0 2 0 −1 0 1
Ah =
0 0 1 1
Bh =
0 0 −1 0
0 0 0 1 0 0 0 1
2. Expressions de F ◦ G et G ◦ F .
Par la proposition 7 ces matrices sont respectivement :
0 1 0 0 0 −1 0 2
1 0 0 3 −1 0 0 −1
Ah Bh =
0 0 −1 1
B h A h =
0 0 −1 −1
0 0 0 1 0 0 0 1
3. Expressions de F −1 et G −1 .
Notons Ãh la matrice associée à F −1 et B̃h la matrice associée à G −1 . Par la proposition 8 :
0 1 0 −2 1 0 0 −1
−1 0 0 1 0 −1 0 1
Ãh = B̃h =
0 0 1 −1 0 0 −1 0
0 0 0 1 0 0 0 1
Chapitre
Rotations de l’espace
5
Nous étudions différentes façons d’obtenir une rotation de l’espace : en la décomposant par des
rotations élémentaires ou bien à l’aide des quaternions.
y
.
Q
θ
. P
.
O x
cθ = cos(θ ) sθ = sin(θ )
ROTATIONS DE L’ESPACE 55
#»
v
. .
Q
θ
. P
y
Rx
x′
x
La rotation de matrice R x (θ ) envoie un point de coordonnées X = y sur le point de coordonnées Y = y′
z z′
où :
Y = R x (θ )X .
z
Ry
Rz
Orientation. L’espace est muni d’un repère orthonormé direct (O x yz). Si on se place à l’origine, à cheval
sur un axe orienté dans le sens de la flèche, alors une rotation d’angle positif correspond à tourner vers la
droite pour les rotations d’axe (O x) et (Oz) et vers la gauche pour la rotation d’axe (O y).
z
+
y
+
v (θ ) = (1 − cθ )v x v y + sθ vz
R #» (1 − cθ )v 2y + cθ (1 − cθ )v y vz − sθ vx
(1 − cθ )vx vz − sθ v y (1 − cθ )v y vz + vx sθ (1 − cθ )vz2 + cθ
ROTATIONS DE L’ESPACE 57
x′
x
Ainsi cette rotation envoie un point de coordonnées X = y sur le point de coordonnées Y = y′ par la
z z′
relation Y = R #»
v (θ )X .
2
v (θ ) = I + sin(θ )Q #»
R #» v + (1 − cos(θ ))Q #»
v
Remarques :
#» #» #»
• La matrice Q #» v est la matrice de l’application linéaire u 7→ v ∧ u .
#»
• La matrice P #» v est la matrice de la projection orthogonale sur l’axe de rotation dirigé par v . Elle vérifie :
#» #» T #» #» T
v = Q #» = v v (produit de la matrice colonne v par la matrice ligne v ).
2
P #» v
• La matrice I − P #»v = I − Q #»
2
v
est la matrice de la projection orthogonale sur le plan orthogonal à l’axe #»
v.
2. Angles d’Euler
2.1. Conventions
Le but est d’obtenir n’importe quelle rotation de l’espace à partir de trois rotations élémentaires. Il y a tout
d’abord une difficulté technique : de nombreux choix sont possibles pour l’ordre des rotations élémentaires
et il faut aussi décider si on compose les rotations d’une façon relative ou absolue. Il y a aussi une difficulté
théorique (quel que soit le choix précédent) qui s’appelle le « blocage de cadran » (gimbal lock). Nous
allons ici faire un choix (décliné en deux variantes) et donner les explications en adoptant le langage du
mouvement d’un avion.
Rz (γ)
R y (β)
R x (α)
y
x
Pour la convention x- y-z on commence donc par une rotation d’axe x (d’angle α), puis d’axe y (d’angle β),
et enfin d’axe z (d’angle γ). Noter bien que, pour les matrices, cet ordre correspond au produit R x , R y et Rz
de la droite vers la gauche.
La matrice obtenue après calculs est :
cβ cγ −cα sγ + sα sβ cγ sα sγ + cα sβ cγ
R = cβ sγ cα cγ + sα sβ sγ −sα cγ + cα sβ sγ
−sβ sα cβ cα cβ
ROTATIONS DE L’ESPACE 59
pitch
roll
yaw
yaw
roll
Z
pitch Y
1. On commence par une rotation R1 autour de l’axe z et d’angle γ. On considère maintenant le repère
(O x ′ y ′ z ′ ) obtenu par rotation du repère (O x yz).
2. On continue par une rotation R2 autour de l’axe y ′ et d’angle β. On considère ensuite le repère
(O x ′′ y ′′ z ′′ ) obtenu par rotation du repère (O x ′ y ′ z ′ ).
3. On termine par la rotation R3 autour de l’axe x ′′ et d’angle α.
ROTATIONS DE L’ESPACE 60
z z
z′
O
y′
y
γ
x x y
Repère (O x yz) x′
Repère (Ox ′ y ′ z ′ )
z z ′′ z z ′′
z ′′′
z′ z′
y ′′′
x ′′′
′′ α
x x ′′ y ′′
y ′′
β
y′ y′
y y
x x
x′ x′
Repère (O x y z )
′′ ′′ ′′ Repère (Ox ′′′ y ′′′ z ′′′ )
C’est très facile de comprendre si on se place dans le repère (OX Y Z) relatif, lié à l’objet en mouvement.
Reprenons le cas d’un avion, alors on effectue successivement une rotation autour de l’axe relatif Z (yaw),
puis de l’axe relatif Y (pitch), et enfin de l’axe relatif X (roll). On pourrait exprimer cette rotation par la
notation matricielle R Z (γ)R Y (β)R X (α), mais cela peut être trompeur car à chaque rotation le repère (OX Y Z)
en jeu a changé.
Les calculs sont plutôt théoriques et peuvent être passés lors d’une première lecture. On commence par des
rappels sur les changements de base.
Passage d’une base à une autre pour les coordonnées d’un point/vecteur. On considère la base canonique
#» #» #»
B de R3 formée de trois vecteurs ( i , j , k ). Autrement dit, on se place dans le repère (O x yz) usuel, considéré
#» #» #»
comme repère absolu. On considère une autre base B′ formée de trois vecteurs ( f1 , f2 , f3 ), cela correspond
à un nouveau repère (O x ′ y ′ z ′ ).
Notons P, la matrice de passage de l’ancienne base B à la nouvelle base B′ . Comme ici B est la base
#»
canonique, le premier vecteur colonne de P est formé des coordonnées du vecteur f1 , le deuxième vecteur
#» #»
colonne est formé des coordonnées de f2 , le troisième vecteur colonne est formé des coordonnées de f3 .
ROTATIONS DE L’ESPACE 61
Notons X les coordonnées d’un point (ou d’un vecteur) dans la base B et notons X ′ les coordonnées de ce
même point dans la base B′ , X et X ′ sont reliés par la relation suivante :
X = P X ′.
Passage d’une base à une autre pour une matrice/application linéaire. Soit f : R3 → R3 une application
linéaire (par exemple une rotation). On note A la matrice de f dans la base B et on note B la matrice de f
dans la base B′ . Ces deux matrices sont liées par la relation suivante :
A = P BP −1 .
Passage de la convention z- y ′ -x ′′ à la convention x- y-z.
Exprimons les rotations de la convention z- y ′ -x ′′ dans le repère fixe (O x yz).
• On se place dans la base B (c’est-à-dire avec le repère (O x yz)). On applique une rotation d’axe z. Cette
application a pour matrice A1 = Rz (γ) dans la base B.
• Cette rotation transforme le repère (O x yz) en un repère (O x ′ y ′ z ′ ) (associé à la base B′ ). La matrice de
passage correspondante P2 est tout simplement P2 = Rz (γ).
• On se place dans le repère (O x ′ y ′ z ′ ) et on applique une rotation d’axe y ′ . Dans ce repère, la matrice de
cette rotation est B2 = R y (β). Quelle est la matrice de cette même rotation dans le repère fixe (O x yz) ?
C’est A2 = P2 B2 P2−1 d’après la formule de changement de base. Ainsi A2 = Rz R y R−1 z (en omettant les
angles).
• Quelle est la matrice de la rotation autour de z suivie d’une rotation autour de y ′ ? Dans le repère fixe
(O x yz) cette matrice est A2 A1 . Calculons-la (en omettant β et γ) :
A2 A1 = (Rz R y R−1
z )R z = R z R y .
Ainsi la convention tronquée z- y ′ correspond à la convention y-z.
• La rotation autour de l’axe y ′ transforme le repère (O x ′ y ′ z ′ ) en un repère (O x ′′ y ′′ z ′′ ). La matrice de
passage associée est P3 = R y (β).
• Dans le repère (O x ′′ y ′′ z ′′ ) on applique la rotation B3 = R x (α). Dans le repère (O x ′ y ′ z ′ ), la matrice de
cette même rotation est A′3 = P3 B3 P3−1 . Et dans le repère fixe (O x yz), c’est
A3 = P2 A′3 P2−1 = P2 (P3 B3 P3−1 )P2−1 = Rz R y R x R−1 −1
y Rz .
• Ainsi la composition des trois rotations avec la convention z- y ′ -x ′′ dans le repère fixe (O x yz) a pour
matrice A3 A2 A1 , dont le calcul se simplifie :
A3 A2 A1 = (Rz R y R x R−1 −1 −1
y R z )(R z R y R z )R z = R z (γ)R y (β)R x (α).
Ce qui est exactement la matrice de la convention x- y-z !
x ′′ z
y
y ′′
x
z ′′
Lors de la mission Apollo 11 qui envoya Neil Armstrong et Buzz Aldrin sur la Lune, le gyroscope de Mike
Collins, resté en orbite, resta bloqué à cause du phénomène décrit ci-dessus. Ce gyroscope était naturellement
conçu à l’aide de trois cadrans circulaires (un pour chaque axe de rotation). Une solution pour éviter ce
problème est de rajouter un quatrième degré de liberté qui permet de ne pas s’approcher des points de
blocage. C’est pourquoi après sa mission Mike Collins déclara « Pour Noël prochain j’aimerais un quatrième
cadran ! ».
3. Quaternions
3.1. Motivation
Les rotations définies par un axe et un angle ou bien définies à l’aide des angles d’Euler sont assez difficiles
à manipuler en particulier si on souhaite composer deux rotations. En plus avec les angles d’Euler, on risque
de se confronter au « blocage de cadran », inévitable pour certaines configurations. La solution élégante
à tous ces problèmes est d’utiliser les quaternions. Les calculs sont de simples manipulations algébriques,
faciles à réaliser pour un humain et un ordinateur. L’inconvénient est que l’on perd en compréhension
géométrique et que la notion n’est presque jamais enseignée. On va présenter ici cette nouvelle notion de
quaternions, qui sera vite comprise par tous ceux qui connaissent les nombres complexes.
q = a + bi + cj + dk
i2 = j2 = k2 = ijk = −1
ROTATIONS DE L’ESPACE 64
Avant d’expliquer comment multiplier deux quaternions, il est fondamental de comprendre que la multipli-
cation des quaternions n’est pas commutative. Par exemple ij = k alors que ji = −k. Voici un tableau qui
résume les multiplications élémentaires (colonne de gauche premier terme, première ligne second terme,
dans le tableau le produit des deux) :
× i j k
i −1 k −j
j −k −1 i
k j −i −1
Ce tableau se déduit des axiomes. Par exemple, exprimons ij. On sait ijk = −1, donc en multipliant à droite
les deux termes de cette égalité par k on obtient ijk2 = −k mais comme k2 = −1 on obtient ij = k. À vous de
vérifier les autres résultats.
Une fois les multiplications élémentaires comprises, la multiplication de deux quaternions s’effectue comme
un produit où i, j et k jouent le rôle de variables.
Exemple.
Soient :
q1 = 1 + 2i − 3j et q2 = i − 4k.
Alors :
q1 q2 = (1 + 2i − 3j) (i − 4k)
= i − 4k + 2i2 − 8ik − 3ji + 12jk
= i − 4k − 2 + 8j + 3k + 12i
= −2 + 13i + 8j − k
Par contre :
q2 q1 = (i − 4k) (1 + 2i − 3j)
= i + 2i2 − 3ij − 4k − 8ki + 12kj
= i − 2 − 3k − 4k − 8j − 12i
= −2 − 11i − 8j − 7k
Donc q1 q2 n’est pas égal à q2 q1 .
3.4. Propriétés
On retient de l’exemple précédent :
• Si la partie réelle d’un quaternion est nulle (c’est-à-dire a = 0), on parle de quaternion vectoriel pur.
Le produit de deux quaternions vectoriels purs est un quaternion vectoriel pur.
3.5. Rotations
Soit un point P de coordonnées (x, y, z) ∈ R3 , que l’on peut aussi considérer comme un vecteur. À P on
associe le quaternion vectoriel pur :
p = xi + yj + zk.
x quaternion vectoriel pur xi + yj + zk est identifié au point de coordonnées (x, y, z) ou
Réciproquement tout
aussi au vecteur y .
z
Considérons une rotation R d’axe le vecteur unitaire #»
v = (v , v , v ) et d’angle θ . À cette rotation on associe
x y z
le quaternion :
θ θ
q = cos + sin vx i + v y j + vz k
2 2
p′ = qpq−1
On dit que p′ est le conjugué de p par q. Ainsi le calcul de l’image d’un point par une rotation correspond à
une simple multiplication de quaternions. Noter que comme q est unitaire alors q−1 = q̄.
#»
v
.
p′ = qpq−1
θ
. p
.
La preuve que ce calcul correspond à une rotation n’est pas si simple (et nous l’admettons). Par contre cela
entraîne une formule simple pour la composition de deux rotations.
Proposition 2.
Si une rotation R1 a pour quaternion q1 et une rotation R2 a pour quaternion q2 , alors R2 ◦ R1 (la rotation
R1 suivie de la rotation R2 ) a pour quaternion associé q2 q1 . Cela correspond à la transformation :
p 7→ (q2 q1 )p(q2 q1 )−1 .
Exemple.
Soit R1 une rotation d’axe (−2, 1, 1) et d’angle π3 . Soit R2 une rotation d’axe (1, 0, −1) et d’angle π2 . Soit
P le point de coordonnées (1, 0, 0). Déterminer l’image de P par la rotationp R1 suivie de la rotation R2 .
#» 6
• On commence par rendre unitaire le vecteur de l’axe de R1 : v 1 = 6 (−2, 1, 1). Le quaternion associé
à R1 est
p p p p p
π π 6 3 6 6 6
q1 = cos( 6 ) + sin( 6 ) (−2i + j + k) = − i+ j+ k.
6 p 2 6 12 12
#» 2
• On normalise le vecteur de l’axe de R2 : v 2 = 2 (1, 0, −1). Le quaternion associé à R2 est
p p
π π 2 2 1 1
q2 = cos( 4 ) + sin( 4 ) (i − k) = + i − k.
2 2 2 2
• Le quaternion associé au point P est simplement p = i.
Passons aux calculs.
On aurait obtenu le même résultat si on avait d’abord calculé q2 q1 , puis (q2 q1 )−1 , et enfin p′′ =
(q2 q1 )p(q2 q1 )−1 (voir l’exemple ci-après).
Exemple.
Soit la rotation R1 d’axe (1, 1, 0) et d’angle π et la rotation R2 d’axe (0, 1, 1) et d’angle π (ce sont deux
retournements). Quels sont l’axe et l’angle de la rotation R2 ◦ R1 ?
p p
1. On commence par rendre les vecteurs unitaires : #»
v 1 = 22 (1, 1, 0) et #»
v2 = 2
2 (0, 1, 1). Les quaternions
q1 et q2 associés respectivement à R1 et R2 sont alors :
p p p p
2 2 2 2
q1 = i+ j q2 = j+ k.
2 2 2 2
ROTATIONS DE L’ESPACE 67
Perspective
6
1. Perspective linéaire
La perspective linéaire est aussi appelée perspective conique ou projection centrale.
1.1. Principe
La perspective linéaire est la perspective qui se rapproche le plus de la vision humaine, les objets éloignés
paraissent plus petits.
Notations :
• C est un point de l’espace, il peut représenter la caméra, l’œil, un capteur, ou aussi un éclairage,
• P est un plan de l’espace,
• P désigne un point d’un objet O.
Construction : pour chaque point P, si la droite (C P) recoupe le plan P , on note P ′ ce point d’intersection.
On définit ainsi une projection de l’espace E sur le plan P .
. P′
O
.
f .
P
plan P : (x = 0)
.C
y
x
PERSPECTIVE 69
Y
. plan P : (x = 0)
O
.. P′ plan P de projection
. X
x
C y
O
. X
Proposition 1.
Pour P de coordonnées (x, y, z) (avec x ̸= f ) alors son image par la perspective linéaire est P ′ de coordonnées
(X , Y ) dans P avec :
= λy
X −f
où λ=
Y = λz x−f
−−→ −→
Démonstration. Les points C, P et P ′ sont alignés donc il existe λ ∈ R tel que C P ′ = λC P. Notons P ′ (0, y ′ , z ′ )
les coordonnées de P ′ dans le repère (O x yz). Alors :
x−f −f
−→ −−→
CP = y C P′ = y′
z z′
PERSPECTIVE 70
Ainsi
−f
− f = λ(x − f ) λ = x− f
−−→′ −→
C P = λC P ⇐⇒ y′ = λ y ⇐⇒ X = λy
z ′ = λz Y = λz
où l’on a identifié X = y ′ et Y = z ′ .
= λ( y − yC ) + yC
X −x C
où λ=
Y = λ(z − zC ) + zC x − xC
−−→ −→
Démonstration. Depuis l’identité C P ′ = λC P, on a :
0 − xC x − xC
y ′ − yC = λ y − yC ,
z ′ − zC z − zC
d’où les formules.
2. Projection orthogonale
2.1. Principe
C’est comme si on plaçait une caméra à une distance infinie, dirigée orthogonalement à un plan. Une fois
projetés, deux objets identiques auront les mêmes dimensions, qu’ils soient proches ou éloignés du plan de
projection. La projection orthogonale est utilisée dans le dessin technique, les plans d’architectes. . .
.P′
. P
plan P : (x = 0)
x
PERSPECTIVE 71
Le plan de projection P est le plan (O yz) et l’axe de projection est l’axe (O x). Le vecteur #»
1
n = 0 est
0
colinéaire à cet axe et orthogonal au plan.
z plan P : (x = 0)
P′
. y
X
.
P
#»
n
y
λ
Démonstration. Il s’agit de se ramener au cas simple, c’est-à-dire à la projection orthogonale sur le plan
(O yz) dont la matrice est M1′ .
• Tout d’abord on modifie le plan de projection, en changeant la longitude de sorte que la trace du plan
de projection sur le plan horizontal (O x y) soit l’axe (O y). L’opération correspondante est une rotation
d’angle −λ autour de l’axe (Oz). La matrice de cette opération est :
cos λ sin λ 0
M3 = − sin λ cos λ 0 .
0 0 1
PERSPECTIVE 73
z z z
plan (x = 0)
P′
′
P
P
y y y
x x x
• Ensuite on redresse le plan à la verticale en modifiant la latitude ϕ (de façon à ce que le plan contienne
l’axe (Oz)). Il s’agit d’effectuer une rotation d’angle −ϕ autour de l’axe (O y). La matrice de cette
transformation est :
cos ϕ 0 − sin ϕ
M2 = 0 1 0 .
sin ϕ 0 cos ϕ
• Le plan de projection est devenu le plan (O yz), il ne reste alors plus qu’à projeter suivant l’axe (O x), la
matrice de cette projection est la matrice M1′ du cas simple.
• Les formules s’obtiennent par composition :
x
X
= M y où M = M1′ M2 M3 .
Y
z
x′
Remarque. Si on veut les coordonnées y′ du projeté P ′ dans les coordonnées originales (O x yz), les
z′
formules sont : ′
x x
y ′ = (M2 M3 )−1 M1 (M2 M3 ) y .
z′ z
z
z
y
x
x y
Projection d’un cube Vecteur normal au plan de projection
3. Projection parallèle
3.1. Principe
La projection parallèle est la généralisation de la projection précédente, sauf que l’axe de projection n’est
plus supposé orthogonal au plan de projection.
Cette projection s’appelle aussi perspective axonométrique. Elle est utilisée dans le dessin technique, en
infographie, en architecture. . . Deux objets identiques auront les mêmes dimensions qu’ils soient proches
ou éloignés du plan de projection. Nous allons adopter un point de vue différent de celui de la projection
orthogonale.
#»
f3
#»
j
#»′
α f3
β
kz
e#»3 kx
ky #»
i
#»′
e#»2 f1
#» #»′
f1 f2
#»
e#»1 f2
Si (e#»1 , e#»2 , e#»3 ) est la base orthonormée canonique de R3 , alors la projection chaque vecteur e#»i se projette sur
#»′
fi .
PERSPECTIVE 76
#»
f3
#»′
α f3
kz β
kx ky
#»′
#» f1 #»′
f1 f2
#»
f2
e#»3
e#»1
e#»2
3.3. Formule
Proposition 4.
La formule de la projection parallèle est
x
−k x sin α k y sin β
X 0
= M y
où M= .
Y k x cos α k y cos β kz
z
Autrement dit :
= −k x sin(α) · x + k y sin(β) · y
X
= k x cos(α) · x + k y cos(β) · y + kz · z
Y
L’idée de ces formules est simple. Si (e#»1 , e#»2 , e#»3 ) est la base orthonormée canonique de R3 , alors chaque
#» #»
vecteur e#»i se projette sur f i′ qui est un multiple de f i :
#» #» #»
• e1 7→ f1′ = k x f1 ,
#» #» #»
• e2 7→ f2′ = k y f2 ,
#» #» #»
• e3 7→ f3′ = kz f3 .
Ainsi trois vecteurs de l’espace s’envoient sur 3 vecteurs du plan.
x
Démonstration. Soit P un point de coordonnées y , c’est-à-dire :
z
−→
OP = x e#»1 + y e#»2 + z e#»3 .
#» −→
La projection parallèle envoie e#»i sur f i′ , donc l’image de OP est :
#» #» #»
x k x f1 + y k y f2 + zkz f3 .
Or :
#» − sin α #» sin β #»
0
f1 = f2 = f3 = .
cos α cos β 1
Ainsi la projection est l’application :
x
α β
− sin sin 0
y 7−→ x k x + yky + zkz .
cos α cos β 1
z
D’où le résultat.
PERSPECTIVE 77
p
2π 2π p2
α= 3 ,β = 3 , kx = k y = kz = 3
k x cos α 0 1
α, β = π2 , k x , k y = kz = 1
β = π2 , k y = kz = 1
3π 1
α= 4 , kx = 2
β = π2 , k y = kz = 1
3π
α= 4 , kx =1
4. Autres perspectives
Nous étendons notre étude à des projections plus exotiques, dont certaines permettent d’avoir une vision
large de la scène.
Y =z
z .
. (θ , z)
.
−π
.0 .
π X = −θ
θ
. (r, θ , z) y
Cette projection cylindrique est du même type que la projection de Mercator pour représenter le globe
terrestre à plat. Elle conduit à une forte distorsion au niveau des pôles.
. .P
P ′
On peut bien sûr limiter la vision à 180° en se limitant au demi-cylindre défini par − π2 ⩽ θ ⩽ π2 .
On rappelle les formules de passage (x, y, z) 7→ (r, θ , z) :
r = x2 + y2
p
θ = arctan2( y, x)
Par exemple prenons une grille dans le plan (x = 3) :
PERSPECTIVE 79
Voici sa projection cylindrique ainsi que celle d’un cube (on pourrait ajouter un agrandissement le long de
l’axe X pour améliorer le rendu).
On pourrait imaginer beaucoup d’autres variantes, mais comme pour les projections cartographiques, aucune
n’est parfaitement fidèle.
y .
P
. .P
P′ ′′
R
plan (x = R)
IMAGES
82
Chapitre
Lancer de rayons I
7
Nous abordons les bases du ray-tracing : nous lançons un rayon depuis une source et calculons en
quel(s) point(s) ce rayon atteint un objet géométrique (plan, triangle, sphère...).
Le principe général et l’utilisation du ray-tracing seront expliqués plus tard dans un chapitre plus
avancé.
.B
.
P
#»v
n#»
.
S
.A
Proposition 1.
1. Le rayon coupe la droite (AB) si et seulement si #»
v · #»
n= ̸ 0 où #»
n est un vecteur (non nul) orthogonal à (AB).
2. Le point d’intersection est alors P = S + t #»
v avec
−
→
SA · #»
n
t = #» #»
v·n
LANCER DE RAYONS I 84
−
→
3. Il s’écrit aussi P = A + αAB avec
−
→ #»
SA · m
α = −−
→ #»
AB · m
#» est un vecteur (non nul) orthogonal à #»
où m v.
4. Le point d’intersection P appartient au segment [AB] si et seulement si 0 ⩽ α ⩽ 1 .
On détaille la preuve ci-dessous.
Démonstration.
L’intersection avec la droite existe-elle ? On décide facilement si le rayon coupe la droite : le rayon
intersecte la droite (AB) si et seulement si AB et #»
v ne sont pas parallèles. Ainsi, si on note #»
−
→
n un vecteur
#» #»
(non nul) orthogonal à (AB), l’intersection existe si et seulement si v · n ̸= 0.
Intersection. Pour décider si le rayon coupe le segment, on a besoin de calculer l’intersection du rayon avec
la droite (AB). Le point P d’intersection est un point du rayon, donc P = S + t #» v pour un certain t ∈ R. Le
−→
point P appartient à la droite (AB) donc s’écrit P = A + αAB pour un certain α ∈ R.
−→
Petits rappels sur les notations affines : P = S + t #»
v signifie que P est le point vérifiant S P = t #»
v , de même
−
→ −
→ −
→ −
→
P = A + αAB signifie AP = αAB. Enfin la différence de deux point B − A est le vecteur AB.
→
−
.B
AB
.
A
Calcul de t. On prend le produit scalaire avec #»n de part et d’autre de l’égalité (1) :
−
→
t v · n = SA · #»
#» #» n + αAB · #»
−
→
n
Comme #»
−
→
n est orthogonal à AB :
−
→
t #»
v · #»
n = SA · #»
n + 0,
ainsi
−
→
SA · #»
n
t = #» #» .
v·n
Cela suffit pour calculer l’intersection du rayon avec la droite (AB). Mais pour le segment [AB] il faut calculer
α.
Calcul de α. On repart de l’égalité (1), mais cette fois on effectue le produit scalaire avec m, #» vecteur
orthogonal à #»v :
t #» #» = −
v ·m
→ #»
SA · m
→ #»
−
+ αAB · m,
donc
−
→ #» → #»
−
0 = SA · m + αAB · m.
D’où :
−
→ #»
SA · m
α = −−
→ #» .
AB · m
LANCER DE RAYONS I 85
.B
.
P
#»
m
#»v
n#»
.
S
.A
face visible
.B
face non visible
#»
v #»n
.A
P
#»
.
S
v .
P
#»
n
zS
v = yv . zv
Proposition 2.
Le rayon intersecte le plan si et seulement si #»
v · #»
n ̸= 0. Si c’est le cas le point d’intersection est P = S + t #»
v avec :
LANCER DE RAYONS I 86
a x S + b yS + czS + d
t =−
a x v + b y v + cz v
0
Si on note O = 0 l’origine du repère, alors on peut récrire :
0
−→ #»
OS · n + d
t = − #» #»
v·n
Démonstration. Le rayon ne coupe pas le plan lorsqu’il est parallèle au plan, c’est-à-dire lorsque #»
v et #»
n
#» #»
sont orthogonaux. Ainsi l’intersection existe si et seulement v · n ̸= 0.
Les coordonnées du point P sont :
xS + t x v
xS xv
P = S + t #»
v = yS + t y v = yS + t y v .
zS zv zS + tz v
Le point P appartient au plan P si ses coordonnées vérifient l’équation a x + b y + cz + d = 0, donc :
a(x S + t x v ) + b( yS + t y v ) + c(zS + tz v ) + d = 0
⇐⇒ a x S b yS + czS + d + t(a x v + b y v + cz v ) = 0
a x S + b yS + czS + d
⇐⇒ t = −
a x v + b y v + cz v
−→
Le numérateur s’écrit aussi OS · #»
n + d et le dénominateur #»
v · #»
n.
1.3. Triangle
Considérons un triangle de l’espace défini par trois points A, B, C non alignés. On considère un vecteur #»
n
orthogonal au triangle, nous choisissons :
#» −→ −→
n = AB ∧ AC.
C . P
#»
.
S
v .
P
.B
#»
n .A
Proposition 3.
1. Le point d’intersection P entre le rayon et le plan (ABC) vérifie :
−
→ −
→ −→ −
→ −
SA · #» (SA ∧ AC) · #» (SA ∧ AB) · #»
→
n v n
t = #» #» α=− #» #» β= #» #»
v·n v·n v·n
α⩾0 β ⩾0 α+β ⩽1
3. En plus, le triangle est devant la source si et seulement si t ⩾ 0 et intersecte le triangle sur sa face visible si
et seulement si #»
v · #»
n < 0.
Autre méthode. Nous verrons une méthode plus efficace dans le chapitre « Lancer de rayons II ».
LANCER DE RAYONS I 88
1.4. Polygone
Pour le lancer de rayon vers un polygone, il suffit de déterminer l’intersection du rayon avec le plan contenant
le polygone, puis de décider si le point d’intersection est à l’intérieur ou à l’extérieur du polygone.
A3 . P
#»
. v .
P
S
. .
A2
.
A
An
1
#»
n
Tout d’abord la notion de courbe de Jordan permet d’identifier clairement l’intérieur de l’extérieur. Soit
C une courbe du plan, continue, fermée (elle se referme sur elle-même), simple (elle ne se recoupe pas),
alors C découpe le plan en deux régions : une partie compacte (l’intérieur) et une partie non compacte
(l’extérieur). L’intérieur et l’extérieur s’intersectent exactement en C .
extérieur
intérieur
Nous allons voir trois méthodes pour décider si un point P est à l’intérieur ou l’extérieur d’un polygone.
(On ne discutera pas du cas particulier où P est exactement sur le bord du polygone.) Les deux premières
méthodes sont des méthodes planes.
A. Méthode topologique. On considère une courbe de Jordan C du plan. Soit P un point du plan. On trace
une demi-droite D+ issue de P. On compte le nombre N de fois où la demi-droite D+ intersecte la courbe C .
Le point P est à l’intérieur de C si et seulement si N est impair.
.
. ..
. ..
.P
. Q
LANCER DE RAYONS I 89
⊕
.
A1 .
Ai
.
An . .A i+1
⊖
A2 .
.
.
P P
.
A2
.
⊕ .A .
.
i+1 .
A
An
1
Ai ⊖
Avant la preuve, distinguons un triangle ABC positif (A, B, C apparaissent dans l’ordre trigonométrique)
d’un triangle ABC négatif .
.C .A
A .
⊕ C . ⊖
.B .B
Triangle ABC positif Triangle ABC négatif
Démonstration. Considérons le cas d’un polygone numéroté positivement. Pour un point P à l’intérieur du
polygone, tout triangle PAi Ai+1 est positif, quel que soit i = 1, . . . , n. Alors que pour un point P situé à
l’extérieur certains triangles PAi Ai+1 sont positifs et d’autres PA j A j+1 sont négatifs.
Or :
Le triangle PAi Ai+1 est positif
# » # »
⇐⇒ det( PAi , PAi+1 ) ⩾ 0
x − xi x − x i+1
⇐⇒ ⩾0
y − yi y − yi+1
⇐⇒ (x − x i )( y − yi+1 ) − (x − x i+1 )( y − yi ) ⩾ 0
D’où le résultat dans le cas où la numérotation est orientée positivement. Le cas d’une numérotation orientée
négativement est similaire.
Le résultat précédent n’est pas nécessairement très pratique car il nécessite de calculer les coordonnées des
sommets Ai du polygone dans un repère orthonormé du plan P contenant le polygone, mais souvenons-nous
que ce plan P est un plan de l’espace.
LANCER DE RAYONS I 90
Il peut être plus facile d’effectuer les calculs dans un autre système de coordonnées. Considérons le repère
(A1 , #» v ) d’origine A1 et de base définie par #»
u , #» u = A1 A2 et #»
−−→ −−→
v = A1 An . Dans ce repère les coordonnées de
A1 sont (0, 0), celles de A2 sont (1, 0), celles de An sont (0, 1). De façon générale on note Ai (αi , βi ) les
coordonnées des sommets et P(α, β) les coordonnées du point P dans ce repère.
.
An .
. A (α , β )
i i i
#»
.
v P(α, β)
.
. #»
.
A2
A 1
u
.
Ai+2 .A i+1
.
Ai+2
θi+1 .A i+1
P
θi+1
P
. . θi
θi
P . .A i
.A i
Rappelons comment calculer l’angle (non-orienté) |θ | entre deux vecteurs non nuls #»
u et #»
v . La relation
#» #» #» #»
u · v = ∥ u ∥ × ∥ v ∥ cos(θ )
implique :
#»
u · #»
v
|θ | = arccos .
∥ #»
u ∥ × ∥ #»v∥
Cette formule est valable pour des vecteurs du plan, mais aussi pour des vecteurs de l’espace.
#» θ
v
#»
u
. . O
P2 deux solutions
. . P1
P0
une solution
pas de solution
.
S
#»
v
Voici deux façons d’aborder le problème, que l’on retrouvera et détaillera dans le cas général juste après.
Méthode algébrique. Considérons le cercle C de centre O = (x O , yO ) et de rayon R. Une équation est
(x − x O )2 + ( y − yO )2 = R2 .
Le paramétrage du point P = (x, y) du rayon donne :
x xS xv
= +t .
y yS yv
On obtient donc 3 équations et 3 inconnues (t, x, y). Mais attention ce n’est pas un système linéaire, car
l’équation d’un cercle est de degré 2. Cependant nous arriverons à résoudre ce système et à exprimer les
deux solutions P1 et P2 lorsque le rayon intersecte le cercle.
Méthode géométrique. Notons H le projeté orthogonal du centre O sur le rayon. Si OH ⩽ R alors le rayon
intersecte le cercle et on déterminera les deux solutions P1 et P2 (symétriques de part et d’autre de H).
. .. . P2 .
H
.
.
H
.
P1
#»
v
. #»
v
S
O
R S
.
O
R
Cas OH ⩽ R
deux solutions Cas OH > R
aucune solution
Dans la suite on considère le lancer d’un rayon en direction d’une sphère S de centre O et de rayon R. On
peut noter que si on considère le plan P qui contient le rayon et le centre de la sphère alors l’intersection
de P avec S est un cercle C de centre O et de rayon R ; on ramène ainsi le problème dans l’espace à un
problème du plan.
LANCER DE RAYONS I 93
.
P2
.
P1
O
R
.#»
S
v . ..
P1
R
P2
.S
#»
v
. #»
v visible
S
. . . . #»
visible
invisible invisible
. S
v
Remarque : on peut décider si le rayon coupe (ou pas) la sphère juste par des additions et multiplications
de nombres réels. Par contre le calcul des coordonnées des points d’intersection nécessite d’extraire une
racine carrée, ce qui est un calcul un peu plus compliqué. En plus nous avons supposé ∥ #»
v ∥ = 1, si ce n’est
pas le cas il y a des racines carrées et des divisions à effectuer.
LANCER DE RAYONS I 94
.
P2
.H
h
.
P1
h
#»
R
.
S. v O
Démonstration.
1. Comme #»
v est unitaire alors t H = SH. Or :
−→ #» −→ −→ #» −→ #»
SO · v = SH + HO · v = SH · v = SH.
−→ −→
Nous avons utilisé que HO et #»
v sont orthogonaux donc leur produit scalaire est nul et aussi que SH et
#» −→
v sont colinéaires et de même sens, donc leur produit scalaire est SH × ∥ #»
v ∥. Ainsi t H = SH = SO · #»
v.
2. Le théorème de Pythagore appliqué dans le triangle SOH (rectangle en H) donne :
SO2 = SH 2 + OH 2 ,
on a noté d = OH et déjà calculé SH, d’où :
−→
d 2 = OH 2 = SO2 − SO · #»
2
v .
3. d = OH mesure la distance minimale entre un point du rayon et le centre O de la sphère. Si d > R le
rayon ne coupe pas la sphère, si d = R le rayon coupe la sphère tangentiellement en H, si d < R le rayon
coupe la sphère en deux points distincts.
4. Dans le cas d ⩽ R, le rayon coupe la sphère en deux points P1 et P2 symétriques l’un de l’autre par
rapport à H. Considérons le triangle OP1 H (rectangle en H), le théorème de Pythagore donne :
OP12 = OH 2 + H P12 .
p
On a R = OP1 , d = OH et on note h = H P1 , ainsi h2 = R2 − d 2 . Donc h = R2 − d 2 . Comme #» v est
unitaire alors t 1 = t H − h, et comme P2 est le symétrique de P1 par rapport à H, alors t 2 = t H + h.
Pout
. .B
Pin
.
A
.
#»
v
.
S
Nous lançons un rayon issu de S(x S , yS ) dirigé par le vecteur #» v = (x v , y v ). On veut savoir si le rayon coupe
la boite, et si oui, calculer les valeurs t in et t out des points P = S + t #»
v d’entrée et de sortie. Pour simplifier
les explications nous supposons que le rayon pointe vers la droite et vers le haut (x v > 0 et y v > 0).
Le rayon coupe la droite verticale d’équation (x = x A) (qui supporte le côté gauche de la boite) pour le
paramètre t x A qui vérifie l’équation x S + t x v = x A, donc
xA − xS
t xA = .
xv
De même le rayon coupe la droite horizontale d’équation ( y = yA) (qui supporte le bas de la boite) pour le
paramètre :
yA − yS
t yA = .
yv
Pout
. .B .B
Pin
.t
Pout
.
. .
xA
A
.
.
P
in
t
.
#»
v t A #» t
yA
.
S
yA
.
S
v xA
On définit ainsi :
xA − xS yA − yS
t xA = t yA = et t in = max(t x A , t yA ).
xv yv
Si le rayon coupe la boite, alors le point d’entrée est Pin , de paramètre t in .
LANCER DE RAYONS I 97
.t
in
. .B .B
tout
. A
. . .t
in
A t
#» out
v #»
.
S
.
S
v
.P
Pin
. out
#»
.
v
S
Voici le calcul du point d’entrée Pin , de paramètre t in , et celui de sortie Pout , de paramètre t out , s’ils existent.
Algorithme.
• t in := −∞, t out := +∞ (ou bien une très petite et une très grande valeur).
• Si x v ̸= 0, poser :
xA − xS x B − xS
t x A := t x B :=
xv xv
et
t in := max t in , min(t x A , t x B ) t out := min t out , max(t x A , t x B ) .
LANCER DE RAYONS I 98
• Si y v ̸= 0, poser :
yA − yS yB − yS
t yA := t yB :=
yv yv
et
t in := max t in , min(t yA , t yB ) t out := min t out , max(t yA , t yB ) .
• Si z v ̸= 0, poser :
zA − zS zB − zS
t zA := t zB :=
zv zv
et
t in := max t in , min(t zA , t zB ) t out := min t out , max(t zA , t zB ) .
• Si t in ⩽ t out alors le rayon intersecte la boite en Pin (de paramètre t in ) et Pout (de paramètre t out ),
sinon le rayon ne coupe pas la boite.
Note : pour accélérer l’affichage, il est important de pouvoir effectuer les calculs en parallèle. Une instruction
conditionnelle (comme si ... alors ..., sinon ...) peut poser des problèmes. C’est la situation rencontrée
lorsque qu’on considère la définition classique du maximum :
(
a si a ⩾ b,
max(a, b) =
b sinon.
Cependant il est possible de contourner ce problème et de définir le maximum par une seule formule :
a + b + |a − b|
max(a, b) = .
2
Note. La section sur les polygones est inspirée de Paul Bourke : Determining if a point lies on the interior of a
polygon.
Chapitre
8
Lumière
Comment une scène est-elle éclairée ? Quelle est la couleur des objets illuminés ?
1. Physique de la lumière
éclai
rage
2 Objet
1 Source lumineuse
Élément de surface
n
io
éx
fl
ré
réception
3 Observateur
Le but est de déterminer la couleur d’un objet perçu par un observateur (œil, caméra, capteur. . .). Dans la
pratique, on décompose l’objet en surfaces élémentaires (petits carrés ou petits triangles par exemple) et on
détermine la couleur de chaque surface élémentaire.
Cette couleur dépend de la source lumineuse (position, direction, intensité, couleur. . .), de l’objet observé
(position, orientation, couleur, texture. . .) ainsi que de la position de l’observateur.
LUMIÈRE 100
1.2. Physique
Le vocabulaire permet de distinguer ce qui est émis par la source lumineuse de ce qui reçu/perçu par
l’objet/l’observateur.
• Luminosité/Intensité lumineuse/Éclairage/Luminance.
L’unité désuète d’intensité lumineuse est le watt (exemple une ampoule classique de 75 W, un projecteur
de 500 W). Cela correspondait à la puissance consommée par l’éclairage avant l’apparition des ampoules
LED. L’unité officielle est le lumen (lm) : elle compte le flux d’énergie lumineuse (puissance) pour un
angle d’un stéradian. Exemple : l’éclairage d’une pièce de 10 ou 15 m2 nécessite une intensité totale
d’environ 3000 à 5000 lm.
La luminosité c’est donc ce qui arrive vers l’objet, ce n’est pas ce qui est réfléchi et observé.
• Illumination/Éclairement/Illuminance.
L’illumination c’est la façon dont la lumière arrive vers l’objet. Elle dépend des propriétés physiques de
l’objet (position, orientation. . .). L’unité d’éclairement est le lux (lx) : c’est le flux d’énergie reçue par
une unité de surface. Exemple : 1 lumen illuminant une surface de 1 m2 correspond à 1 lux.
1.3. Couleur
La lumière possède sa couleur propre, l’objet possède aussi sa couleur propre. Le but est d’attribuer une
couleur perçue à (une surface élémentaire de) l’objet.
• Une lumière monochromatique est caractérisée par une seule longueur d’onde : de 400 nm (violet) à
800 nm (rouge) pour les longueurs d’ondes visibles. C’est l’analogue de jouer une seule note de musique
sur un piano.
• La lumière est une superposition d’ondes monochromatiques (comme un accord de musique où plusieurs
touches sont jouées en même temps).
• L’objet absorbe certaines ondes (de longueurs d’onde déterminées) et en réfléchit d’autres. Par exemple,
si un objet, éclairé par une lumière blanche, absorbe le bleu et réfléchit le rouge et le vert alors sa couleur
perçue sera jaune (= rouge + vert).
Nous caractériserons une couleur via le système RGB (Red/Green/Blue).
• Une couleur est caractérisée par trois réels (r, g, b) avec r, g, b ∈ [0, 1]. Exemples : (1, 0, 0) est la couleur
rouge, (1, 1, 0) est du jaune. . .
• Addition. L’addition de deux couleurs se fait terme à terme, sans dépasser 1. C’est par exemple l’opération
naturelle lorsque on considère l’éclairage total produit par deux sources lumineuses. Si Cl1 = (r1 , g1 , b1 )
et Cl2 = (r2 , g2 , b2 ) alors l’addition totale est (r1 + r2 , g1 + g2 , b1 + b2 ). Cependant il faut prendre garde
à ce qu’aucune composante ne dépasse 1. Ainsi l’addition de couleurs est définie par la formule :
Cl1 ⊕cl Cl2 = min(r1 + r2 , 1), min(g1 + g2 , 1), min(b1 + b2 , 1)
Lorsque une lumière de couleur Cl1 éclaire un objet de couleur Cl2 , la multiplication des couleurs renvoie
la couleur perçue. Exemple : si une lumière de couleur Cl1 = (1, 0, 1) (violet) éclaire un objet de couleur
Cl2 = (1, 1, 0) (jaune) alors la multiplication des couleurs donne Cl1 ⊗cl Cl2 = (1, 0, 0), ainsi la couleur
perçue de l’objet est rouge. Pour la multiplication de couleurs sombres, on peut ajuster la formule par
un facteur multiplicatif.
LUMIÈRE 101
1.4. Notations
Introduisons les notations utilisées dans la suite du chapitre.
S
. #»
n
#»
ℓ
.
.
P
élément de surface
#»
v
O
.
Trois points.
• S : le point origine de la source lumineuse,
• P : le point centré sur la surface élémentaire de l’objet,
• O : le point où on place la caméra/l’œil/l’observateur.
Trois vecteurs.
#»
• ℓ : le vecteur unitaire issu de P dirigé vers la source lumineuse,
#»
• n : le vecteur unitaire orthogonal à la surface élémentaire,
#»
• v : le vecteur unitaire issu de P et dirigé vers l’observateur O.
2. Éclairage
S
.
#»
ℓ
#»
n .
.
P
• une intensité : iℓ .
#»
L’intensité iℓ et cette direction ℓ sont constantes, quelle que soit la position du point P.
#»
.
.
P
S
. ℓ
#»
Le vecteur ℓ dépend de la position du point P :
−→
#» PS
ℓ = −→ .
∥ PS∥
L’énergie lumineuse iℓ reçue au point P diminue lorsque P s’éloigne de la source S. Selon quelle loi varie
cette intensité ? Notons r = PS la distance entre le point P et la source. Notons i0 l’intensité reçue à une
distance d’une unité (par exemple 1 m).
Proposition 1.
i0
iℓ =
r2
Justification. Notons E0 l’énergie lumineuse qui traverse une sphère de rayon 1 centrée sur la source S
pendant une unité de temps (ex. 1 s). Cette énergie se répartit uniformément sur une surface d’aire 4π
(rappel : l’aire d’une sphère de rayon r est 4πr 2 ).
r
1
Un tout petit peu plus tard ces rayons traversent la sphère de rayon r. L’énergie E0 est conservée mais
cette fois se répartit sur une surface d’aire 4πr 2 . Ainsi chaque élément de surface reçoit beaucoup moins
E
d’énergie. Par exemple, 1 m2 de la sphère de rayon 1 reçoit une énergie 4π0 , alors que 1 m2 de la sphère de
E
rayon r reçoit une énergie 4πr0 2 .
1
Les paramètres α, β, γ permettent davantage de réglages pour obtenir un éclairage plus réaliste. Si α = i0 ,
β = 0, γ = 0, on retrouve la loi précédente.
LUMIÈRE 103
2.3. Spot
Pour un spot, les rayons lumineux rayonnent à partir de la source, mais sont limités par un cône. Par
exemple : un spot, une lampe de poche, un projecteur.
#»
u
S
.
Le cône est caractérisé par un axe central #»
u (supposé unitaire) et un demi-angle θ .
Proposition 2.
Le point P appartient au cône de sommet S, d’axe #»
u et de demi-angle θ si et seulement si :
cos(ω) ⩾ cos(θ )
#» θ
S
. u
θ
ω #»
ℓ
.
P
−→ #»
Démonstration. Tout d’abord on obtient l’angle ω entre S P et #»
u par la relation ℓ · #»
u = − cos(ω), donc :
#» #»
cos(ω) = − ℓ · u .
De plus P appartient au cône si l’angle ω est plus petit que l’angle θ , plus précisément lorsque |ω| ⩽ θ , ce
qui équivaut à cos(ω) ⩾ cos(θ ). D’où le résultat.
L’intensité lumineuse reçue par un point du cône suit la même loi que celle de la lumière ponctuelle :
(
i0
r2
si cos(ω) ⩾ cos(θ )
iℓ =
0 sinon
On rappelle que r = S P.
LUMIÈRE 104
Pour atténuer le passage zone obscure/zone éclairée, on peut effectuer une transition douce au bord du
cône. On assombrit progressivement la zone éclairée située à angle ω lorsque celui-ci se rapproche de
l’angle θ , selon la formule :
(
i0
r2
(cos(ω))eatt si cos(ω) ⩾ cos(θ )
iℓ =
0 sinon
L’exposant d’atténuation eatt permet de paramétrer cette transition, qui est plus condensée pour des petites
valeurs de l’exposant.
Voici les allures de (cos(ω))eatt pour différentes valeurs de l’exposant. Pour eatt = 0 le passage zone éclai-
rée/zone non-éclairée se fait sans transition. Pour eatt > 0, il y a plateau autour du centre du cône (pour ω
proche de 0) et une atténuation plus ou moins rapide sur les bords du cône (pour |ω| proche de θ ).
intensité
e=0
e = 0.1
e = 0.3
e = 0.5
−θ 0 θ angle ω
LUMIÈRE 105
3. Illumination
Ce modèle est empirique, et n’est pas fondé sur une réalité physique, mais a fait ses preuves. Il est utilisé
dans les moteurs 3D en attendant le ray-tracing généralisé. Nous allons essentiellement considérer une
seule source lumineuse (pour plusieurs sources on effectue les calculs pour chaque source et on additionne
les résultats). Nous omettons ici l’éclairage indirect issu de la réflexion de la lumière sur un autre objet.
LUMIÈRE 106
Objet 1
éc
la
ira
ge
in
écla
di
irag
e dir
re
ect
ct
Objet 2
.P2
.
P1
Clirr
Cette couleur RGB est la même pour tout point de l’objet, quelle que soit la position de l’observateur. Cette
luminosité est de faible intensité et n’est pas considérée comme une source lumineuse pour les autres objets.
.P2
.
P1
LUMIÈRE 107
La couleur perçue Clamb dépend de la couleur Clsource et de l’intensité isource de l’éclairage, mais aussi de la
couleur propre de l’objet Clobjet :
Remarques :
• On rappelle que ⊗cl désigne la multiplication terme à terme des composantes r, g, b.
• Cette lumière éclaire tous les objets et toutes leurs faces.
• C’est un éclairage dont l’intensité reste modérée et qui doit rester discret. Il a pour défaut « d’aplatir » la
scène.
• La différence avec la luminosité irradiante est que la luminosité ambiante a une intensité plus forte donc
elle pourrait éclairer les autres objets (mais ici nous n’en tiendrons pas compte).
La lumière reçue se diffuse dans toutes les directions mais l’intensité diffuse dépend de l’intensité de la
lumière reçue et donc de la position de l’objet par rapport à l’éclairage.
S
.
#»
ℓ2
#»
. P2
ℓ1
n#»2
n#»1
.
P1
où isource et Clsource sont l’intensité et la couleur de la source lumineuse et Clobjet est la couleur propre de
l’objet.
#»
Expliquons le terme max( ℓ · #» n , 0). Tout d’abord l’éclairage est situé derrière l’objet (autrement dit éclaire
#» #» #»
la face non visible) lorsque ℓ · n < 0, dans ce cas max( ℓ · #» n , 0) = 0 et donc la couleur diffuse est noire
Cldiff = (0, 0, 0).
#»
Le produit scalaire ℓ · #»n module l’intensité en fonction de l’orientation de la surface éclairage vis à vis de
#»
la source. Si la surface est perpendiculaire aux rayons lumineux alors #» n et ℓ sont égaux et leur produit
#»
scalaire vaut 1. Si la surface n’est pas perpendiculaire, l’intensité est diminuée d’un facteur ℓ · #» n < 1.
Justification. Considérons l’énergie E0 d’une bande de rayons lumineux de largeur d qui atteint une surface.
Dans un premier cas cette surface est perpendiculaire aux rayons et l’énergie E0 se répartit sur une largeur
d. Dans un second cas la surface est inclinée d’un angle θ , et alors la même énergie E0 se répartit sur une
d
largeur plus grande, égale à cos(θ ).
LUMIÈRE 108
d
d
d d/ cos(θ )
Si maintenant on raisonne en énergie reçue par unité de surface (par exemple 1 m2 ) alors chaque unité de
surface inclinée reçoit moins d’énergie avec un coefficient multiplicatif de cos(θ ) (qui est inférieur ou égal à
1).
d d
d
d
d d d/ cos θ d
Remarque. C’est aussi la raison pour laquelle il fait plus froid en hiver qu’en été : en hiver, le Soleil est plus
bas dans le ciel et l’énergie reçue s’étale sur une plus grande surface.
#»
Calculs. On note θ ∈] − π, π] l’angle entre les vecteurs #»n et ℓ . On exprime facilement θ par la relation :
#»
cos(θ ) = ℓ · #»
n
#»
n
#»
ℓ
d θ
θ
θ
d/ cos(θ )
Et les relations trigonométriques usuelles, montrent que la bande de largeur d illumine sur la surface inclinée
d
une bande de largeur cos(θ ) . Par conséquence l’intensité lumineuse diffuse s’exprime par :
#»
idiff = isource × cos(θ ) = isource ℓ · #»
n.
Cela explique presque complètement les termes de la formule. Cependant on ne diffuse pas de lumière si la
source est derrière l’objet, c’est-à-dire si |θ | > π2 (dans ce cas la lumière arrive sur la face cachée). Or, pour
nos angles, |θ | > π2 équivaut à cos(θ ) < 0, donc si cos(θ ) < 0 on fixe idiff = 0.
LUMIÈRE 109
#»
n
face visible
face cachée P
.
#»
ℓ
Résumons : (
isource cos(θ ) si cos(θ ) ⩾ 0,
idiff = isource max(0, cos(θ )) =
0 sinon.
Attention ! La luminosité spéculaire perçue dépend de la position de l’observateur. Elle demande donc
davantage de calculs que les luminosités précédentes. Par contre elle apporte une grosse touche de réalisme.
#»
Notons #»r l’axe principal de la réflexion, qui est le vecteur symétrique de ℓ (qui pointe vers la source
lumineuse S) par rapport à #» n (orthogonal à la surface). Notons #» v le vecteur, issu de P, pointant vers
#» #» #» #»
l’observateur O. Nous supposons que ℓ , n , r , v sont des vecteurs unitaires.
#»
n
#» #»
ℓ r
.
Lemme 1.
#» #» #»
r = 2( ℓ · #»
n ) #»
n−ℓ
Clspec = isource ( #»
r · #»
v )espec Clsource ⊗cl Clobjet
LUMIÈRE 110
#»
Si ℓ · #»
n < 0 ou #»
r · #»
v < 0 alors, la surface n’est pas visible ou pas éclairée et on pose :
Clspec = (0, 0, 0)
S
.
. P2
.
P1
La formule dépend :
• de isource et Clsource : l’intensité et la couleur de la source lumineuse,
#» #»
• de la position de l’axe principal de réflexion r par rapport à la direction v vers l’observateur,
• d’un exposant espec qui est un paramètre d’étalement,
• et de Clobjet , la couleur propre de l’objet.
S
.
r#»2
.
O #»
ℓ2
#» v#»2
. P2
ℓ1 r#»1
n#»2
n#»1 v#»1
.
P1
Justifications.
Preuve du lemme 1.
#»
Démonstration. Notons #»
p un vecteur orthogonal à #»
n , appartenant au plan (P, #»
n , ℓ ).
#» #»
ℓ
n #»
r
.
P #»
p
Dans la base ( #»
n , #»
p ), écrivons :
#»
ℓ = α #»
n + β #»
p (1)
Alors, par symétrie, on aura :
#»
r = α #»
n − β #»
p.
Calcul de α. On effectue le produit scalaire des termes de l’égalité (1) avec #»
n :
#» #» #» #» #» #»
ℓ · n = αn · n +β p · n,
LUMIÈRE 111
donc
#» #»
ℓ · n = α · 1 + β · 0.
#»
Ainsi α = ℓ · #»
n.
#»
Calcul de r . On repart de l’égalité (1) :
#»
β #»
p = ℓ − α #»
n,
donc
#» #» #» #» #»
r = α #»
n − β #»
p = α #»
n − ( ℓ − α #»
n ) = 2α #»
n − ℓ = 2( ℓ · #»
n ) #»
n − ℓ.
#»
r ω
#»
v
.
Alors :
cos(ω) = #»
r · #»
v.
Intensité réfléchie/perçue. L’intensité renvoyée par réflexion dépend de l’angle ω, elle diminue lorsque
l’observateur s’éloigne de l’axe principal de réflexion, selon la formule :
(cos(ω))espec
Plus l’exposant est grand, plus l’intensité lumineuse se concentre autour de l’axe principal de réflexion.
intensité
1
e=1
e=3
e = 10
e = 50
− π2 0 + π2 angle ω
Lumière diffuse/lumière spéculaire. Un même éclairage peut avoir une composante diffuse et une composante
spéculaire, on distingue alors deux intensités isource,diff et isource,spec .
Voici un exemple de combinaison de ces deux composantes : à gauche les luminosités diffuses et spéculaires
séparées, à droite la lumière résultante.
LUMIÈRE 112
Variante Blinn–Phong.
Comme on l’a dit, la lumière spéculaire nécessite beaucoup de calculs car il faut à chaque fois calculer le
vecteur #»v qui dépend de C et de P, mais aussi le vecteur #»
r.
Il existe une variante pour la formule de la luminosité spéculaire, appelée variante Blinn–Phong. Certains
trouvent le rendu un peu plus réaliste, et elle a l’avantage de demander moins de calculs dans certaines
situations.
Définissons le vecteur bissecteur (half-way vector) :
#» #»
#» ℓ+v
h = #» #» .
∥ℓ + v∥
#»
h
#»
ℓ
#»
v
.
La nouvelle formule est alors :
#»
= isource ( h · #»
′
′
C lspec n )espec Clsource ⊗cl Clobjet
#» #»
valide lorsque ℓ · #»n ⩾ 0 et h · #»
n ⩾ 0.
′
Il faut ajuster l’exposant espec pour retrouver des effets similaires à la formule classique.
Expliquons l’avantage de la formule de Blinn-Phon. Si on considère un éclairage directionnel, c’est-à-dire où
#»
ℓ est un vecteur constant et un observateur éloigné, c’est-à-dire #» v est aussi un vecteur constant, alors le
#»
vecteur bissecteur h est un vecteur constant (indépendant de l’objet) et n’a besoin d’être calculé qu’une
#»
seule fois, pour calculer le produit scalaire h · #»
n . Par contre dans la formule classique, le calcul de #»
r · #»
v
#»
nécessite au préalable le calcul de r , qui varie pour chaque surface élémentaire (via n ).#»
Chapitre
9
Pixels
1. Pixels
Un pixel peut être noir ou blanc, mais aussi en couleur (le plus souvent obtenue par l’addition des couleurs
de trois sous-pixels : un rouge, un vert, un bleu). La taille d’un pixel est généralement inférieure à 1 mm,
elle dépend du type d’écran. Plus la taille d’un pixel est petite, plus la résolution est bonne. Une autre unité
de mesure de la résolution est le nombre de pixels par pouce, abrégé par « ppp » (ou ppi pour pixels per
inch). Comme son nom l’indique, il s’agit de compter combien de pixels on peut juxtaposer sur une longueur
d’un pouce (1 pouce = 25,4 mm). L’équivalent dans le monde de l’impression est le dpi (dots per inch).
Voici quelques exemples approximatifs :
Type d’écran Taille du pixel (mm) Résolution (ppp)
Télévision 0.5 50
Ordinateur portable 0.17 150
Téléphone 0.05 500
1 2π
L’œil humain a une acuité d’environ 1 minute d’arc (c’est-à-dire 1/60 de degré, soit θ = 60 360 ≃ 0.00029
radian). Ainsi à une distance d, l’œil distingue des pixels d’une taille ℓ ≃ dθ (avec ℓ et d en mètre et θ en
radian).
ℓ
d θ
PIXELS 114
Ainsi en regardant un écran à 20 cm de distance, augmenter la résolution au-delà de 400 ppp ne permet de
ressentir une amélioration. Il faut alors mieux concentrer ses efforts sur la qualité de l’image (vitesse de
rafraîchissement, couleurs, rayonnements. . .) et sur l’énergie (consommation, encre électronique. . .).
Un pixel n’est pas vraiment un petit carré ! Dans ce cours nous assimilerons un pixel à un (petit) carré.
Cependant la réalité est plus compliquée. Un écran est composé d’une grille de sources lumineuses, appelées
des sous-pixels. Chaque source illumine une petite zone qui n’est pas nécessairement un carré (cela peut
être un disque ou un rectangle). Chaque source est souvent d’une seule couleur parmi rouge/vert/bleu,
mais son intensité peut varier. Il n’y a donc physiquement aucun carré dans ce processus ! Sur la photo
ci-dessous on pourrait regrouper trois sous-pixels superposés et appeler le petit carré correspondant un
pixel, en lui attribuant la couleur résultant des trois sous-pixels. Il est plus juste de dire que les pixels sont
un échantillonnage (relevé en des points d’une grille) du signal lumineux produit par l’écran.
1.2. Écran
La taille d’un écran est le couple (largeur, hauteur) exprimé en pixels, habituellement notée sous la forme
largeur × hauteur. Le résultat du produit correspond au nombre total de pixels de l’écran.
hauteur
largeur
Le repère des pixels sur un écran a son axe des « y » dirigé vers le bas, contrairement à l’usage en mathéma-
tiques (que l’on suivra dans cet ouvrage). Ainsi le pixel en haut à gauche a pour coordonnées (0, 0).
x
(0, 0)
P2 P2
P1 P1
L’idée naturelle est de calculer une équation de la droite (P1 P2 ). Une équation réduite est y = αx + β où α
est la pente et β l’ordonnée à l’origine. On va préférer écrire l’équation sous la forme :
y = α(x − x 1 ) + y1
∆y y2 − y1
où (x 1 , y1 ) est un point de la droite et la pente se calcule par α = ∆x = x 2 −x 1 .
.
P2
∆y
P1. ∆x
PIXELS 116
∆y
Hypothèse. On suppose x 1 < x 2 , y1 < y2 et α = ∆x ⩽ 1.
Autrement dit, on trace un segment ayant une pente comprise entre 0 et 1, c’est-à-dire l’angle formé entre
une horizontale et le segment est compris entre 0° et 45°. Les autres situations s’obtiennent par symétrie et
ne seront pas détaillées ici.
Les pixels à colorier ont pour abscisses successives i = x 1 , x 1 + 1, . . . , x 2 . L’ordonnée réelle correspondant à
l’abscisse i est y = α(i − x 1 ) + y1 mais nous voulons une coordonnée entière qui s’obtient par un arrondi :
j = arrondi(α(i − x 1 ) + y1 )
Remarque : si ⌊x⌋ désigne la partie entière d’un réel x (obtenue par une commande floor(x) en Python
par exemple) alors :
arrondi(x) = ⌊x + 21 ⌋
Pour minimiser les opérations on remarque que lorsque l’on passe de l’abscisse x à l’abscisse x + 1 alors
l’ordonnée passe de y à y + α.
y +α .
α
y . 1
x x +1
Exemple.
On souhaite tracer le segment reliant P1 (0, 0) et P2 (8, 3). On calcule :
∆y y2 − y1 3
α= = = = 0.375.
∆x x2 − x1 8
PIXELS 117
3
P2
2
0
P1
0 1 2 3 4 5 6 7 8
Noter que les calculs se font avec des nombres réels et sont donc assez lents.
7
P2
6
2 2
P2
1 1
0 0
P1 P1
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 8 9
4
P2
3
0
P1
0 1 2 3 4 5 6 7 8 9 10 11
PIXELS 118
Noter que p, m sont des constantes entières avec p > 0 et m < 0 ; d est le « défaut », c’est une variable qui
détermine s’il faut prendre le pixel juste à côté ou bien s’il faut monter d’un cran. Le défaut est alors mis
à jour en lui ajoutant selon le cas une valeur fixe p > 0 ou m < 0 (si d < 0, le nouveau défaut d + p a
augmenté ; si d ⩾ 0, le nouveau défaut d + m a diminué car m < 0).
+m
+p
d d
Noter qu’en plus les opérations sur les entiers sont élémentaires : ce sont des additions et un test de positivité.
Exemple.
On souhaite tracer le segment reliant P1 (0, 0) et P2 (8, 5). On calcule :
p = 10 m = −6 d0 = 2
Voici les valeurs lorsqu’on applique l’algorithme :
nouvelle
i j d monter ?
valeur de d
0 0 2 oui −4
1 1 −4 non 6
2 1 6 oui 0
3 2 0 oui −6
4 3 −6 non 4
5 3 4 oui −2
6 4 −2 non 8
7 4 8 oui 2
8 5
PIXELS 119
5
P2
4
0
P1
0 1 2 3 4 5 6 7 8
.
A(x k + 1, yk + 1)
.
A(x k + 1, yk + 1)
.
P(x k , yk )
.
B(x k + 1, yk )
.
P(x k , yk )
.
B(x k + 1, yk )
.
A′
.
A
.
B′
.
A′
.
P
.P
.
B
.
B′
Cas A. Cas B.
Cas du choix A (cas Dk ⩾ 0). Le pixel suivant a pour abscisse x k + 2 et pour ordonnée soit yk + 2 (A′ ),
soit yk + 1 (B ′ ).
.
A′ (x k + 2, yk + 2)
. .
A(x k + 1, yk + 1) B ′ (x k + 2, yk + 1)
.
P(x k , yk )
Cas A.
Calculons alors le défaut :
Dk+1 = E(A′ ) + E(B ′ ) = E(x k + 2, yk + 2) + E(x k + 2, yk + 1)
= a(x k + 2) + b( yk + 2) + c + a(x k + 2) + b( yk + 1) + c
= 2a x k + 2b yk + 4a + 3b + 2c
= Dk + 2a + 2b
PIXELS 121
.
A′ (x k + 2, yk + 1)
.
P(x k , yk )
.
B(x k + 1, yk )
.
B ′ (x k + 2, yk )
Cas B.
Calculons alors le défaut :
Dk+1 = E(A′ ) + E(B ′ ) = E(x k + 2, yk + 1) + E(x k + 2, yk )
= a(x k + 2) + b( yk + 1) + c + a(x k + 2) + b yk + c
= 2a x k + 2b yk + 4a + b + 2c
= Dk + 2a
Ainsi en posant p = 2a = 2∆ y, on obtient la formule de récurrence :
Dk+1 = Dk + p.
Conclusion : on sait calculer Dk+1 qui permet de choisir entre A′ et B ′ . Ainsi à partir de D0 et par les
formules de récurrence ci-dessus on calcule la suite des défauts Dk et on sait donc s’il faut monter le
pixel d’un cran ou pas.
P2 P2
P1 P1
De près le rendu n’est pas impressionnant mais de loin l’amélioration est sensible.
Nous allons expliquer un algorithme simple pour dessiner un segment avec anticrénelage. Nous avons donc
deux pixels l’un au-dessus de l’autre à colorier : le pixel A et le pixel B. Comment répartir 100% de couleur
entre ces deux pixels ?
Commençons par expliquer une analogie issue de la physique. Considérons deux masses ponctuelles liées
entre elles : mA centrée en A et mB centrée en B. Lorsque l’on regarde ce système d’assez loin on peut le
considérer comme un système formé d’une seule masse ponctuelle : la masse totale est m = mA + mB et est
centrée au centre de gravité G. Ce centre de gravité G est défini par la relation :
ℓA mA = ℓB mB
où ℓA = AG et ℓB = BG.
.
A
.G
.
B
.
G
mB
mA
mA + mB
ℓA ℓB
.
A
.
G
.
B
mA mB
Reprenons cette idée : nous répartissons une masse totale m = 1 (100% de la couleur) centrée exactement
sur la droite réelle en G entre deux points A et B.
Notons (x, y) le point G de la droite réelle. Soit alors :
j = ⌊ y⌋ et ℓ = y − ⌊ y⌋
PIXELS 123
respectivement la partie entière et la partie fractionnaire de y. La distance BG est ℓ et la distance AG est 1−ℓ
(car AB = 1). Ainsi pour que les couleurs satisfassent la formule du centre de gravité il faut choisir mA = ℓ et
mB = 1 − ℓ comme intensité de couleur respectivement pour A et B car on a alors bien (1 − ℓ)ℓ = ℓ(1 − ℓ).
On adapte l’algorithme du tracé élémentaire pour y ajouter l’anticrénelage.
Voici l’algorithme du tracé de l’arc de cercle de type Bresenham car il n’utilise que des entiers. Le point de
départ est le point (0, r) (point le plus haut du cercle).
Sur la portion tracée (de 90◦ à 45◦ ) il y a exactement un pixel pour chaque i. Pour obtenir le cercle complet,
en plus du pixel en (x 0 + i, y0 + j), il faut afficher par symétrie les pixels en (x 0 + j, y0 + i), (x 0 − i, y0 + j),
(x 0 − j, y0 + i) (x 0 + i, y0 − j), (x 0 + j, y0 − i), (x 0 − i, y0 − j), (x 0 − j, y0 − i).
Preuve. La preuve est similaire à celle de l’algorithme du tracé d’un segment de Bresenham.
• Équation du cercle.
On suppose que le cercle est centré à l’origine : (x 0 , y0 ) = (0, 0). Un cercle quelconque s’obtiendrait par
translation. Soit la fonction d’écart :
E(x, y) = x 2 + y 2 − r 2
PIXELS 125
Si E(x, y) = 0 le point (x, y) est sur le cercle, si E(x, y) > 0 le point est à l’extérieur, si E(x, y) < 0 le
point est à l’intérieur.
y
. . .
E(x, y) = 0
E(x, y) > 0
E(x, y) < 0
• Descendre ou pas ?
Pour un pixel centré en P déjà tracé, nous devons choisir pour le pixel suivant entre A et B. On choisit le
point le plus proche du cercle, c’est-à-dire le minimum entre |E(A)| ou |E(B)|. On définit le défaut par
D(P) = E(A) + E(B)
et on a :
Si D(P) < 0 alors on choisit A, si D(P) ⩾ 0 alors on choisit B.
.
P(x k , yk )
.
A(x k + 1, yk )
.
P(x k , yk )
.
A(x k + 1, yk )
.
B(x k + 1, yk − 1)
.
B(x k + 1, yk − 1)
.P
.A
.A′
.P
.B′
.
B
.
A′
Cas A.
.
B′
Cas B.
PIXELS 126
Cas du choix A (cas Dk < 0). Le pixel suivant a pour abscisse x k + 2 et pour ordonnée soit yk (A′ ), soit
yk − 1 (B ′ ).
.
P(x k , yk )
.
A(x k + 1, yk )
.
A′ (x k + 2, yk )
.
B ′ (x k + 2, yk − 1)
Cas A.
Le défaut se calcule ainsi :
Dk+1 = E(A′ ) + E(B ′ ) = E(x k + 2, yk ) + E(x k + 2, yk − 1)
= (x k + 2)2 + yk2 − r 2 + (x k + 2)2 + ( yk − 1)2 − r 2
= Dk + 4x k + 6
Cas du choix B (cas Dk ⩾ 0). Le pixel suivant a pour abscisse x k + 2 et pour ordonnée soit yk − 1 (A′ ),
soit yk − 2 (B ′ ).
.
P(x k , yk )
. .
B(x k + 1, yk − 1) A′ (x k + 2, yk − 1)
.
B ′ (x k + 2, yk − 1)
Cas B.
3. Colorier
graine
PIXELS 127
Principe. On part de la graine, qu’on colorie en gris. Pour chacun de ses quatre pixels voisins (gauche, bas,
droite, haut), si c’est un pixel blanc, on applique le processus à partir de ce nouveau pixel.
Ci-dessous la graine et ses quatre voisins.
Mise en œuvre. Ce procédé peut être traduit en algorithmes par différentes méthodes : algorithme récursif,
algorithme avec une pile ou algorithme avec une file. Dans tous les cas ce sont des algorithmes qui utilisent
beaucoup de mémoire afin de stocker les pixels en attente d’être traités. On choisit un algorithme avec file
(queue ou fifo, first in, first out) un peu moins gourmand en mémoire que les autres choix.
4. Animation
Nous expliquons quelques principes liés à l’animation des images. Les premiers dessins animés étaient basés
sur des calques : une image fixe pour le calque de l’arrière-plan, un calque pour le premier plan avec par
exemple un personnage à redessiner de nombreuses fois afin de simuler le mouvement et éventuellement
des calques intermédiaires. On retrouvait aussi cette technique au cinéma où certains arrières-plans étaient
peints.
0%
10 %
19 %
39 %
60 %
80 %
100 %
4.2. La 2.5D
Comme son nom le suggère, la 2.5D est un ensemble des techniques d’animation qui permettent de simuler
une scène 3D. C’est le cas de beaucoup de jeux vidéos de stratégie où le point de vue du joueur est au-dessus
du plateau de jeu. Les objets représentés en perspective (par exemple ci-dessous les immeubles) sont des
petites images 2D pré-dessinées. C’est une technique efficace mais qui nécessite de fixer ou de limiter
fortement le choix de la vue du joueur.
Pour réaliser de petits jeux animés, les modules de Pygame de Python sont très sympas. On explique ci-dessous
les principes de l’animation 2D en suivant la philosophie de Pygame.
Animation 1D.
Commençons par une animation très élémentaire en une seule dimension. Les objets en jeu sont :
• fond qui est l’image d’arrière-plan représentée ici par une liste de 0,
PIXELS 130
• un entier p qui représente la position d’un personnage, ce personnage est représenté par un 1,
• ecran qui est l’image finale affichée, et sera donc une juxtaposition de 0 et de 1.
Les étapes de l’animation sont les suivantes :
• Initialisation. On initialise ecran avec l’image d’arrière-plan fond :
0000000000
On définit une position de départ, par exemple p = 3.
• Affichage. Par ecran[p] = 1 on affiche le personnage :
0001000000
• Déplacement.
— Effacer le personnage. ecran[p] = 0
— Changer la position. p = p + 1.
— Réafficher le personnage. ecran[p] = 1
En répétant le déplacement on obtient, successivement :
0001000000
0000100000
0000010000
0000001000
0000000100
Animation 2D.
Le principe est similaire, il nous faut une image de fond, une image à afficher pour l’objet à déplacer.
L’affichage à l’écran correspond à affecter des valeurs à la mémoire graphique (screen buffer) ; on représente
ici l’écran comme une image.
L’opération fondamentale est la copie rapide ou blit (pour bit-block transfer) qui consiste à copier les données
d’une image dans la mémoire graphique. Concrètement cela signifie copier une image et l’afficher à l’écran
à une position donnée (figure (a)) ou bien copier seulement une partie d’une image (figure (b)).
blit
Sous-image
blit
Le second cas de figure nous sert à effacer le personnage avant de le déplacer, plus exactement on copie à
l’écran la portion de l’arrière-plan à la place qu’occupait le personnage.
Le processus de l’animation est alors le même que précédemment :
• (a) Initialisation. On initialise ecran avec l’image d’arrière-plan fond :
• (b) Affichage. On affiche le personnage à une position donnée.
• Déplacement. (À répéter)
— (c) Effacement du personnage. Pour cela on copie la portion de l’arrière-plan correspondant à l’empla-
cement qu’occupe le personnage.
— (d) Affichage du personnage à sa nouvelle position.
La vitesse du mouvement est contrôlée par la longueur du déplacement et la durée de la pause entre deux
répétitions.
Écran
(a)
Arrière-plan
(b)
Image
(c)
(d)
Chapitre
10
Texture
Les textures permettent de rendre les objets 3D beaucoup plus réalistes en simulant la couleur et
la forme d’une matière. Il s’agit principalement de transformer un carré du plan en une surface de
l’espace.
1.1. Motivation
L’objectif est de décorer un objet 3D déjà modélisé. Une analogie simple serait d’emballer cet objet dans un
papier cadeau sans faire de plis. Ce n’est pas possible en général, c’est un théorème mathématique : par
exemple on ne peut pas emballer parfaitement une sphère à l’aide d’une feuille de papier. Une variante de
cet énoncé est qu’on ne peut pas représenter parfaitement le globe terrestre sur une carte ; il existe différents
types de cartes du monde, mais elles déforment les longueurs, les aires ou bien les angles.
Cependant tout n’est pas perdu : à partir d’une feuille de papier, un tuto d’origami vous explique comment
faire un petit bateau 3D. Si vous avez parfaitement anticipé les pliages et avez colorié votre feuille 2D
intelligemment alors une fois formé votre bateau est déjà peint ! Heureusement pour nous pas besoin d’être
ingénieux, nous allons considérer que notre objet 3D est déjà découpé en morceaux plat que l’on va décorer
un par un.
Ci-dessous une sphère modélisée par un maillage (à gauche), avec un rendu plat (au centre), avec un rendu
lisse (à droite).
TEXTURE 133
Ci-dessous un objet 3D obtenu comme une union de faces (à gauche). Ce maillage est aplati (à droite) en
ce qui s’appelle une uv-map, c’est sur ce patron 2D que la texture est dessinée avant d’être appliquée sur
l’objet 3D.
Quel est l’intérêt d’une texture ? Tout d’abord cela permet une séparation conceptuelle et pratique entre
deux tâches différentes : modéliser un objet d’une part et le décorer d’autre part. Le texturage lui-même
peut se décomposer en plusieurs niveaux : le décor, mais aussi la matière, la granulosité. . . Ensuite il est plus
facile pour un graphiste de créer une jolie texture en 2D que de décorer directement sur l’objet 3D. Enfin,
une texture apporte généralement un gain de temps important pour les calculs. Est-il vraiment utile de
modéliser chaque brique d’un mur ou chaque carré de pelouse surtout s’il s’agit d’un décor assez lointain ?
Explications : on part de l’intervalle de référence [0, 1], à chaque point de cet intervalle on associe une
valeur appartenant à un ensemble E. Le cas le plus fréquent est d’associer une couleur C (u) à chaque point
u ∈ [0, 1], par exemple sous la forme d’une valeur C (u) = (r, g, b) ∈ [0, 1]3 . Autrement dit, il s’agit de
colorier chaque pixel de l’intervalle fixe [0, 1].
B
Φ
0 1 Ψ A
Considérons maintenant un objet O et une de ses faces F . Si l’objet est dans le plan, une face F est un
intervalle [A, B] du plan. La fonction de plaquage est une application bijective Φ :
Φ : [0, 1] −→ F
u 7−→ Φ(u)
Nous notons Ψ = Φ−1 sa bijection réciproque, qui nous sera utile :
Ψ:F −→ [0, 1]
P 7−→ Ψ(P)
Appliquer une texture c’est l’action de C ◦ Ψ, c’est-à-dire associer à chaque P de la face F une couleur par la
fonction :
C Ψ(P)
Autrement dit :
• pour déterminer la couleur de P, on calcule à quel paramètre u ∈ [0, 1] il correspond : u = Ψ(P). La
couleur de P est celle de u : C (u). Cette façon de faire est le texturage inverse : on part du pixel de l’objet
à colorier et on cherche sa couleur par l’application inverse Ψ.
• une autre façon de procéder est le texturage direct : pour chaque u ∈ [0, 1] on calcule P = Φ(u) et on le
colorie par la couleur C (u).
Quelques remarques. Le texturage ne se limite pas à associer une couleur, nous verrons des exemples d’autres
situations un peu plus tard. On pourrait aussi considérer une face F qui ne soit pas un segment, un arc de
cercle par exemple.
(x, y, z)
v
Φ
Ψ
(u, v)
0 1 u
1 1 1
0 1 u 0 1 u 0 1 u
. B
Φ
.P = (1 − u)A + uB
0
.
u
1
.
A
#» #»
Autrement dit, P = (1 − u)A + uB, ou encore en termes de vecteurs AP = uAB. Si on note A(x A, yA) et
B(x B , yB ) alors :
(1 − u)x A + ux B x A + u(x B − x A)
x xA xB
P= = (1 − u) +u = = .
y yA yB (1 − u) yA + u yB yA + u( yB − yA)
Il s’agit en fait de l’interpolation linéaire sur chacune des coordonnées. Les formules sont similaires pour
A(x A, yA, zA) et B(x B , yB , zB ) des points de l’espace.
Φ
C (u)
. B
0 1
u
.
A
x
En dimension 2 ce serait C : [0, 1]2 → R et informatiquement, cette texture est stockée par une heigthmap,
c’est-à-dire une image en niveaux de gris qui représentent des hauteurs. Ci-dessous à gauche une image en
niveaux de gris, les pixels blancs correspondant aux points les plus hauts et les pixels noirs aux points les
plus bas. Sur la figure de droite le rendu 3D correspondant (ici un carré de côté 30 km autour de la source
de la Loire), un facteur d’échelle permet d’obtenir un terrain plus ou moins plat (ici le rendu 3D est réel et
correspond à la displacement map plus bas).
Revenons au cas d’une texture de dimension 1. Pour un point P de la face [A, B] de paramètre u = Ψ(P), au
lieu d’afficher le point P on aimerait afficher le point Q = P + C (u)n# »P .
n# »
Q
Q
. vecteur normal virtuel
surface à simuler
.P surface réelle
Cette modification est « simulée » car on ne va pas modifier la géométrie réelle de l’objet, on ne retient que
la modification de la normale, autrement dit le changement d’éclairage de l’objet. Disons, pour simplifier,
TEXTURE 138
que pour dessiner et éclairer un point d’un objet on a juste besoin de connaître la position de ce point P
et le vecteur normal à l’objet en ce point n# »P (voir le chapitre « Lumière »). Ici on va bien tracer le point
en P mais avec le vecteur normal n# Q » correspondant au point Q. Le calcul de n# » se fait à l’aide de n# » et de
Q P
la fonction u 7→ C (u). Ces calculs sont simples et permettent de simuler efficacement des effets réalistes.
Cependant la géométrie de l’objet n’a pas changé : un rayon lancé sur notre objet intersecte toujours l’objet
sur la face initiale et pas sur la face simulée. Par exemple l’ombre de l’objet ne change pas.
Normal map. Il s’agit d’une variante de la modification précédente, mais cette fois la texture décrit le
nouveau vecteur normal à considérer. Mathématiquement, en dimension 1, cette texture est une fonction
C : [0, 1] → R3 qui à un paramètre u associe une modification du vecteur normal. En dimension 2 ce serait
C : [0, 1]2 → R3 et informatiquement, cette texture est stockée par une image couleur rgb, chaque niveau
de rouge/vert/bleu désignant une des coordonnées (x, y, z).
Il y a donc beaucoup plus de liberté que pour la bump map et l’effet peut être plus réaliste. Il permet même
de réduire drastiquement la taille d’un maillage ou d’une triangulation tout en gardant un rendu 3D de
qualité. Comme précédemment la géométrie réelle de l’objet n’est pas changée, on remplace le vecteur
#» #»
normal n# »P en P par un nouveau vecteur n′P calculé à partir de n# »P et de C (u). C’est ce nouveau vecteur n′P
qui est utilisé en tant que vecteur normal lors de l’éclairage.
Displacement map. Cette modification est très similaire à la modification précédente, sauf que cette fois on
déplace effectivement le point. La texture est de nouveau une application C : [0, 1] → R3 (dimension 1)
#»
ou C : [0, 1]2 → R3 (dimension 2). Le point P est remplacé par le point Q = P + n′P . Ainsi tous les calculs
pour les éclairages, les ombres, les lancers de rayons. . . se font à l’aide de cette nouvelle surface. Comme la
surface déplacée est plus compliquée que la face originale les calculs sont plus longs.
Voici la déformation d’une sphère obtenue à partir d’un déplacement. Ici la texture est un bruit aléatoire.
Un facteur d’échelle permet d’accentuer plus ou moins la déformation.
n# »P n# »
Q n# »P
#»
n′P .Q
#»
n′P
. P
. P
.
n# »P
P
y
b
v
rotation
1 Φ translation
(0, 0) 1 u
(0, 0) a
x
a b
Plus généralement si M = ∈ M2 (R) est une matrice inversible quelconque, la transformation
c d
vectorielle associée est
u u
Φ =M
v v
TEXTURE 140
v
1 Φ
#»
q
(0, 0) 1 u
#»
p
C
D
#» #» y
AD AC
#» B
O #» AB
OA A
Nous verrons ultérieurement comment on peut envoyer le carré unité sur un quadrilatère quelconque.
Noter cependant que 4 points dans l’espace ne sont en général pas dans un même plan, c’est pourquoi il
est beaucoup plus naturel de considérer le cas de trois points de l’espace, car trois points de l’espace sont
toujours coplanaires.
TEXTURE 141
#»
1 AC
#»
j
Φ .
P
v
M
. v
u
#»
AB
B
0 u #» 1 u A
i
Considérons M (u, v) un point du triangle unité de départ. Que (u, v) soient les coordonnées de M signifie
# » #» #» #» #»
OM = u i + v j , c’est-à-dire M = O + u i + v j . Alors P = Φ(M ) où :
#» #» #»
AP = uAB + v AC
c’est-à-dire
#» #»
P = A + uAB + v AC
#»
v AC
. P
A #»
uAB
B
Noter que ces calculs sont valables aussi bien pour A, B, C, P points du plan ou de l’espace : dans tous les
cas seulement deux coordonnées u, v sont nécessaires.
Barycentre. Soient A, B, C trois points du plan ou de l’espace. Le point P est barycentre de (A, α), (B, β),
(C, γ) (avec des réels α, β, γ des réels vérifiant α + β + γ ̸= 0) si :
#» #» # » #»
α PA + β P B + γ P C = 0 .
On appelle alors (α : β : γ) les coordonnées barycentriques de P par rapport au triangle ABC. Les
coordonnées sont dites normalisées si α + β + γ = 1.
TEXTURE 142
. P(α : β : γ)
A
B
Si (α : β : γ) sont des coordonnées barycentriques, alors (λα : λβ : λγ) le sont aussi pour tout λ ∈ R∗ (voir
les coordonnées homogènes du chapitre « Transformations de l’espace »). Ainsi par multiplication par un
1
facteur λ = α+β+γ on peut toujours se ramener à des coordonnées barycentriques normalisées.
Exemples.
.
C(0 : 0 : 1)
.
J( 12 : 0 : 12 )
. .
1
I(0 : 2 : 12 )
. G( 31 :
.
1
3 : 13 )
A(1 : 0 : 0)
K( 21 : 1
2 : 0) . B(0 : 1 : 0)
Les calculs avec les coordonnées barycentriques sont pratiques : le milieu de deux points P(α : β : γ) et
′
α+α′ β+β γ+γ′
Q(α′ : β ′ : γ′ ) est P+Q
2 de coordonnées barycentriques ( 2 : 2 : 2 ).
L’isobarycentre G de A, B, C est G = A+B+C et a pour coordonnées barycentriques ( 13 : 13 : 13 ) = (1 : 1 : 1). Il
# » # » # » #» 3
vérifie GA + GB + GC = 0 .
Quelque remarques.
• Intuitivement, plus P(α : β : γ) est proche de A, plus α est grand ; plus P est proche de B, plus β est
grand ; plus P est proche de C, plus γ est grand.
• P est situé dans le triangle ABC si et seulement si α ⩾ 0, β ⩾ 0 et γ ⩾ 0.
• P est situé sur la droite (BC) si et seulement si α = 0.
TEXTURE 143
. C(0 : 0 : 1)
α⩽0
β ⩽0
.
α, β, γ ⩾ 0
.
B(0 : 1 : 0)
γ=0
β =0
Aires.
On peut déterminer géométriquement les coordonnées barycentriques (α : β : γ) d’un point P. Chaque
coefficient est égal à l’aire du triangle opposé divisée par l’aire du triangle total :
A△ (P BC) A△ (P CA) A△ (PAB)
α= β= γ=
A△ (ABC) A△ (ABC) A△ (ABC)
.C
β α
. .
P(α : β : γ)
A
γ
. B
Ces formules sont valables pour un point P à l’intérieur du triangle. Nous verrons la preuve de ces formules
un peu plus tard. On rappelle que l’on calcule facilement l’aire (sans signe) d’un triangle à l’aide des formules
suivantes :
1 #» # »
A△ (ABC) = ∥AB ∧ AC∥
2
Cette formule est valable dans le plan et l’espace. Dans le plan uniquement on a aussi :
1 #» # »
A△ (ABC) = det(AB, AC)
2
2.3. Conversions
#» #» #» #»
Démonstration. La preuve c’est une reformulation de l’écriture P = A + uAB + v AC sous la forme PA + uAB +
# » #» #» #» # » # » #» # » #» #» # » #»
v AC = 0 . On décompose AB = AP + P B et AC = AP + P C pour obtenir (1 − u − v) PA+ u P B + v P C = 0 .
#»
q =
b
d
#»
p =
a
c
TEXTURE 145
u −1 x − x A
Intéressons-nous au calcul : = T2 . On obtient alors
v y − yA
x − xA x C − xA x B − xA x − xA
#» #» #» #»
y − yA y C − yA A△ (AP, AC) y B − yA y − yA A△ (AB, AP)
u= = #» # » et v= = #» # »
x B − xA x C − xA A△ (AB, AC) x B − xA x C − xA A△ (AB, AC)
yB − yA yC − yA yB − yA yC − yA
Ce sont les formules des coordonnées barycentriques calculées avec des aires de triangles comme on l’avait
annoncé plus haut.
3.1. Répétitions
Si la face à décorer est grande, il peut être utile de réaliser la texture par répétitions d’un motif de base.
R
Motif de base
R R R
R R R
R R R R R R R R
R R R
R R R
Répétition Miroir Bord Extension
Φ (x, y, z)
(u, v) Ψ
Mais comment concrètement décider ce qu’est C (u, v) à partir d’une image définissant la texture ?
Pixel le plus proche. Considérons une image carrée de taille N × N pixels, on note (i, j) avec 0 ⩽ i, j < N les
coordonnées des centres des pixels. Identifions cette même image avec le carré unité [0, 1]2 de coordonnées
(u, v). Noter que les origines de ces deux systèmes de coordonnées sont différentes.
v
j
v=1
. .
(N − 1, 0)
. . . . . .
(N − 1, N − 1)
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . .
(i, j)
. . . .
. . . . . . . .
v=0
. .
(0, 0) (1, 0)
. . . . . .
(N − 1, 0) i
u=0 u=1 u
. .
.
. .
(u, v)
(i, j)
Dans l’autre sens, c’est plus délicat, puisque (u, v) ne correspond généralement pas au centre d’un pixel. On
envoie donc (u, v) sur le centre du pixel le plus proche :
(i, j) = (⌊N u⌋, ⌊N u⌋)
(sauf si u = 1 auquel cas i = N − 1 ou v = 1 auquel cas j = N − 1). On rappelle que ⌊x⌋ désigne la partie
entière de x.
Ce choix pose plusieurs problèmes.
TEXTURE 147
D’une part si la texture est petite (elle a très peu de pixels) par rapport à la face de l’objet à colorier, alors le
rendu sera de mauvaise qualité et fera apparaître une pixellisation.
50 50 75 75
50 75 50 50 75 75
0 25 0 0 25 25
0 0 25 25
D’autre part peuvent apparaître des problèmes d’échantillonage pour des grandes textures périodiques.
y2 . .
.
(x, y)
y1 .
y′
x′
.
x1 x2
Le coefficient associé à F (x 1 , y1 ) est l’aire du rectangle opposé à ce sommet. De même pour les autres
coefficients. Ainsi plus (x, y) est proche d’un sommet, plus la valeur en ce sommet a d’importance.
TEXTURE 148
y2 . . coefficient donné
.
. . (x, y)
par l’aire du
rectangle opposé
y1
couleur en (x 1 , y1 )
x1 x2
Revenons à nos pixels, pour un point (u, v) ∈ [0, 1]2 du carré unité, on lui associe les coordonnées réelles
(x, y) = (N (u+ 12 ), N (v + 12 )) de l’image. On note (x 1 , y1 ) = (⌊x⌋, ⌊ y⌋). Puis on pose x 2 = x 1 +1 et y2 = y1 +1.
Reprenons notre exemple d’une image 2 × 2 (à gauche ci-dessous), l’interpolation bilinéaire permet de la
transformer en une image 4 × 4.
L’interpolation bilinéaire permet un agrandissement artificiel d’une image. Considérons une image (à
gauche), on zoome sur une petite portion d’image qui apparaît alors pixelisée (au centre), l’interpolation
bilinéaire permet d’obtenir une image plus lisse (à droite).
Bien sûr on pourrait faire mieux avec plus de pixels. Par exemple l’interpolation bicubique prend en compte
une moyenne calculée sur les 16 pixels voisins. Mais les calculs sont longs et pas applicables à un rendu en
temps réel.
TEXTURE 149
3.4. Quadrilatère
Le maillage des objets 3D est souvent réalisé par des triangulations. Mais il peut être plus adapté d’utiliser
un maillage qui contient des quadrilatères. Un quadrilatère (quad) de l’espace, ce sont 4 points coplanaires
(le quadrilatère est généralement supposé convexe).
Imaginez que vous êtes dans une rue entourée de deux murs, ces deux murs sont des rectangles de l’espace,
mais ce que vous voyez en perspective ce sont des quadrilatères. Représenter ce mur est donc lié à la vision
d’un objet (ici un rectangle) dans l’espace et a été traité en détail dans le chapitre « Perspective ». Cependant
notre texture elle n’est pas un objet de l’espace. Il faut donc explicitement décrire l’application Φ qui permet
de décorer ce mur (qui est un quadrilatère à l’écran).
.
Le problème se ramène donc à envoyer notre carré unité [0, 1]2 sur un quadrilatère convexe ABC D quel-
conque du plan.
B
TEXTURE 150
Interpolation bilinéaire. On considère le carré unité A0 B0 C0 D0 de coordonnées (u, v) ∈ [0, 1]2 . Soit un
quadrilatère convexe ABC D. L’interpolation bilinéaire qui envoie le carré sur le quadrilatère est :
φ(u, v) = (1 − u)(1 − v)A
+ u(1 − v)B
+ uvC
+ (1 − u)v D
y
v C
D0 C0
ϕ D
.
P
.
Q
B
A0 B0 u
A
x
Dans ces calculs on identifie les points avec des vecteurs (ou bien leurs coordonnées) A(x A, yA),. . . C’est
l’interpolation bilinéaire précédente (en faisant bien attention aux coefficients associés à chaque sommet).
Les calculs sont très faciles. Comme son nom l’indique cette fonction est linéaire dans les deux directions :
un segment vertical du carré est envoyé sur un segment inclus dans le quadrilatère, un segment horizontal
aussi. Par contre cette représentation du quadrilatère ne correspond pas exactement à la réalité d’un carré
vu en perspective.
Transformation projective.
La fonction qui envoie un carré sur un quadrilatère et qui correspond à la perspective linéaire s’appelle une
homographie du plan. Une homographie (ou transformation projective) est une application ϕ de R2 dans
R2 définie par ϕ : (u, v) 7→ (x, y) où :
a0 + a1 u + a2 v b0 + b1 u + b2 v
x= y=
1 + c1 u + c2 v 1 + c1 u + c2 v
avec 8 coefficients réels a0 , a1 , a2 , b0 , b1 ,b2 , c1 et c2 . (Noter que les deux dénominateurs de x et y sont
identiques.)
Notons le carré unité [0, 1]2 par A0 B0 C0 D0 (en fait cela pourrait être un quadrilatère quelconque). Soient A,
B, C, D quatre points du plan (formant aussi un quadrilatère). Alors il existe une unique homographie ϕ
telle que :
ϕ(A0 ) = A ϕ(B0 ) = B ϕ(C0 ) = C ϕ(D0 ) = D.
Comment déterminer cette homographie ? Il faut déterminer les 8 coefficients, pour cela nous avons 4
conditions : ϕ(0, 0) = (x A, yA), ϕ(1, 0) = (x B , yB ), ϕ(0, 1) = (x D , y D ), ϕ(1, 1) = (x C , yC ). Chacune de
ces conditions fournit deux équations. Par exemple ϕ(1, 0) = (x B , yB ) s’écrit (en posant u = 1, v = 0) :
a0 +a1 b0 +b1
x B = 1+c 1
et yB = 1+c 1
. En multipliant par le dénominateur on obtient 8 équations linéaires du type
(1 + c1 u + c2 v)x = a0 + a1 u + a2 v ou (1 + c1 u + c2 v) y = b0 + b1 u + b2 v
TEXTURE 151
où les inconnues sont les 8 coefficients a0 , a1 , . . . , c2 et les données sont les x parcourant {x A, x B , x C , x D } et
y parcourant { yA, yB , yC , y D }.
Nous obtenons donc un système de 8 équations linéaires avec 8 inconnues, qui admet une unique solution
(sauf exceptions que l’on ne discutera pas ici). Résoudre ce système revient à inverser une matrice 8 × 8
(avec beaucoup de 0) ce qui est facile pour un ordinateur. Notons :
1 0 0 0 0 0 0 0 a0 xA
0 0 0 1 0 0 0 0 a y
1 A
1 1 0 0 0 0 −x 0 a x
B 2 B
0 0 0 1 1 0 − y B 0 b0 y
M = H = Q = B
1 1 1 0 0 0 −x C −x C
b1 xC
0 0 0 1 1 1 − y C − y C b2 yC
1 0 1 0 0 0 0 −x D c1 x D
0 0 0 1 0 1 0 − yD c2 yD
Le système d’équations est M H = Q, ainsi on obtient les coefficients H de l’homographie en fonction des
coordonnées Q du quadrilatère par :
H = M −1Q.
Exemple. Sur la figure ci-dessous les sommets du quadrilatère ABC D ont pour coordonnées : (2, −1), (4, − 21 ),
(5, 1), (3, 2), qui forment le vecteur Q = (2, −1, 4, − 12 , 5, 1, 3, 2). On trouve H = (a0 , a1 , a2 , b0 , b1 , b2 , c1 , c2 ) =
(2, 5, −0.125, −1, 0.125, 2.25, 0.75, −0.375) et donc les équations définissant ϕ. On peut voir le quadrilatère
bleu comme un carré vu en perspective.
Le calcul
Une façon plus efficace pour les calculs serait d’utiliser les coordonnées homogènes (voir le chapitre
« Transformations de l’espace »). On rappelle qu’un point (x, y) ∈ R2 correspond aux coordonnées homogènes
y y
(x : y : 1) et réciproquement (x : y : z) = ( xz : z : 1) correspond au point ( xz , z ) ∈ R2 . La matrice d’une
homographie (en coordonnées homogènes) est :
a1 a2 a0
H̄ = b1 b2 b0
c1 c2 1
TEXTURE 152
3.5. Cube
Pour texturer un cube, on se donne souvent l’image du patron regroupant les 6 faces dépliées.
3.6. Cylindre
Pour appliquer une texture sur un cylindre ou une portion de ce cylindre on utilise bien sûr les coordonnées
cylindriques (voir le chapitre « Trigonométrie »). Par exemple pour appliquer une texture de [0, 1]2 vers un
cylindre de rayon r et de hauteur h, on applique la fonction :
Φ : (u, v) 7−→ (r, θ , z) = (r, 2πu, hv)
où (r, θ , z) sont les coordonnées cylindriques.
TEXTURE 153
Si on souhaite n’appliquer la texture que sur une petite partie du cylindre (par exemple une petite étiquette
sur un bouteille) et si cette partie est délimitée en coordonnées cylindriques par θ1 ⩽ θ ⩽ θ2 et z1 ⩽ z ⩽ z2
alors l’application de texture serait :
Φ : (u, v) 7−→ (r, θ , z) = r, (1 − u)θ1 + uθ1 , (1 − v)z1 + vz2 .
3.7. Sphère
Pour appliquer une texture sur une sphère de rayon r on utilise les coordonnées sphériques (r, ϕ, λ) (où
ϕ ∈ [− π2 , π2 ] est la latitude et λ ∈ [−π, π]) est la longitude) :
Φ : (u, v) 7−→ (r, ϕ, λ) = r, π(v − 12 ), 2π(v − 12 ) .
Le centre ( 12 , 12 ) de la texture est envoyé sur le point de la sphère de latitude et longitude nulle.
y v
1
−1 0 1 x 0 1 u
−1
Méthode 1 : rayons. Le disque D est inclus dans le carré C. Pour un point P du bord du disque D, on trace
le rayon issu de l’origine, ce rayon recoupe le bord du carré C en Q qui sera l’image de P. Si maintenant P
est un point intérieur à D, il est situé sur un cercle de rayon r centré à l’origine, on effectue le même procédé
pour envoyer ce point sur le carré de côté 2r. Ainsi chaque cercle concentrique est envoyé sur un carré.
P ..Q
P′ ..
Q′
Les équations F : D → C, (u, v) 7→ (x, y) pour passer d’un disque à un carré sont données par :
( p ( p
sgn(u) u2 + v 2 si u2 ⩾ v 2 sgn(u) uv u2 + v 2 si u2 ⩾ v 2
x= p y= p
sgn(v) uv u2 + v 2 si u2 < v 2 sgn(v) u2 + v 2 si u2 < v 2
La fonction signe, notée sgn(x), est définie par :
+1
si x > 0
sgn(x) = 0 si x = 0
−1 si x < 0
x
Pour x ̸= 0 on a aussi sgn(x) = |x| .
Voici le disque et sa transformation en un carré :
TEXTURE 155
Méthode 2 : via des ellipses. Voyons une méthode un peu plus régulière pour déformer un disque en un
carré. Un segment vertical du carré est envoyé sur une portion d’ellipse dans le disque, de même pour des
segment horizontaux. Les équations G : C → D, (x, y) 7→ (u, v) qui permettent de passer du carré au disque
sont particulièrement simples :
v v
t y2 t x2
u= x 1− v = y 1−
2 2
Les équations F : D → C, (u, v) 7→ (x, y) pour passer d’un disque à un carré sont données par :
1
Æ p 1
Æ p
x= 2 + u2 − v 2 + 2 2u − 2 + u2 − v 2 − 2 2u
2 2
1
Æ p 1
Æ p
y= 2 − u2 + v 2 + 2 2v − 2 − u2 + v 2 − 2 2v
2 2
Voici le carré et sa transformation en un disque :
On transforme ainsi facilement une image carrée en une image ronde (à gauche l’image originale, au centre
la méthode 1, à droite la méthode 2) :
TEXTURE 156
Et une image ronde vers une image carrée (à gauche l’image originale, au centre la méthode 1, à droite la
méthode 2) :
Ces équations et beaucoup d’autres sont à retrouver dans Analytical methods for squaring the disc de
Chamberlain Fong.
Du cube vers la sphère. Voici les équations de la fonction G : (x, y, z) 7→ (u, v, w), analogue à la version
elliptique ci-dessus, qui permettent de passer du cube [−1, 1]3 (avec les coordonnées (x, y, z)) à la boule de
rayon 1 centrée à l’origine (définie par u2 + v 2 + w2 ⩽ 1).
v
t y 2 z2 y 2z2
u= x 1− − +
2 2 3
v
t x 2 z 2 x z2
2
v = y 1− − +
2 2 3
v
t x2 y2 x2 y2
w=z 1− − +
2 2 3
Chapitre
Lancer de rayons II
11
Nous expliquons en détail la technique du ray-tracing et présentons des outils pour accélérer cette
méthode.
z
y
Nous avons des objets Ok , chaque objet est un ensemble de (i, j, z, Cl) où z est la profondeur associée au
pixel (i, j) et Cl est sa couleur (z et Cl dépendent de (i, j)). (Sur le dessin ci-dessus les objets de la scène sont
en 2D mais pourraient aussi être en 3D.) L’écran ou l’image est un ensemble de (i, j, Cl) où Cl représente
la couleur du pixel (i, j). D’un point de vue matériel c’est une zone de la mémoire graphique (buffer). On
initialise la couleur de tous les pixels à la couleur de fond (par exemple blanc ou transparent).
On a besoin en plus d’un z-buffer composé de (i, j, z) qui à la fin stocke la profondeur z de l’objet le plus
proche pour les coordonnées (i, j). On initialisera toutes les profondeurs à +∞.
LANCER DE RAYONS II 158
L’algorithme a le mérite de la simplicité, chaque pixel se voit attribuer la couleur de l’objet le plus proche. Il
fonctionne même avec des objets entrelacés. La position des objets de la scène est rendue fidèlement du
point de vue de l’observateur mais l’affichage ne tient pas compte de l’éclairage.
z
y
1
2
3
On dessine les objets un par un à l’écran (autrement dit on met à jour la partie de la mémoire de l’écran
correspondant aux pixels de l’objet) en partant du plus éloigné et en terminant par le plus proche.
y y y
x x x
Un avantage de cette méthode est qu’il n’y a pas de test de profondeur à chaque pixel, on peut aussi
facilement ajouter de la transparence aux objets. Parmi les inconvénients : on traite tous les objets, même
ceux qui à la fin seront cachés ; il n’y a pas d’entrelacements possibles ; le classement préalable des objets
n’est pas une tâche simple. Enfin on n’a pas résolu les problèmes soulevés avec l’algorithme du z-buffer :
l’affichage ne tient pas compte de l’éclairage.
1.3. Écran
Expliquons comment lancer un rayon depuis un œil à travers un écran. Tout d’abord pour l’écran (ou l’image
à afficher) nous allons fixer des coordonnées (x, y). Supposons que les dimensions réelles de l’écran/l’image
soit a × b et qu’en pixels la dimension soit Nx × N y . La largeur d’un pixel est alors a/Nx , sa hauteur b/N y et
on supposera a/Nx = b/N y pour avoir des pixels carrés. Le pixel indexé (i, j) sera donc considéré comme
un carré centré aux coordonnées Ei j avec :
a b
Ei j = i , j
Nx N y
pour i entier variant de 0 à Nx − 1 et j entier variant de 0 à N y − 1.
LANCER DE RAYONS II 160
b
Ei, j
N y pixels
a
Nx pixels
a
On peut rapidement passer d’un pixel à son voisin de droite en ajoutant Nx (à calculer au préalable) à
b
l’abscisse. Le pixel juste au-dessus s’obtient en ajoutant à l’ordonnée.
Ny
Revenons à notre scène 3D. Le repère a pour coordonnées (x, y, z). L’œil qui sera l’origine des rayons est
situé en O(0, 0, 0). Nous plaçons l’écran dans le plan (z = f ) de sorte que les coordonnées du pixel (i, j)
(que l’on note abusivement encore Ei j ) soient Ei j = i Nax , j Nby , f .
# »
Le rayon issu de O traversant le pixel (i, j) est donc porté par le vecteur v# i»j = OEi j . Si on préfère travailler
# »
avec des vecteurs unitaires on choisit v# » = # i»j .
OE
ij ∥OEi j ∥
Ei j
.
O
v# i»j
2. Principe du ray-tracing
Motivations :
• nous avons déjà vu comment calculer l’intersection d’un rayon avec une surface élémentaire dans le
chapitre « Lancer de rayons I »,
• nous avons aussi vu comment éclairer des objets dans le chapitre « Lumière »,
• il reste à expliquer comment afficher une scène à l’écran avec la méthode du ray-tracing qui fournit une
modélisation réaliste des objets et de leur éclairage à partir des principes de la physique.
LANCER DE RAYONS II 161
Source lumineuse
Objet
Observateur
• Il faut tenir compte de la lumière ambiante, qui provient de toutes les directions et éclaire partout,
comme en extérieur avec un ciel couvert ou en intérieur avec des fenêtres voilées.
• Il peut y avoir plusieurs sources lumineuses et celles-ci ne sont pas toujours réduites à des points.
Au final il y a beaucoup de rayons ! Une infime partie seulement de ces rayons va atteindre notre rétine.
C’est donc un énorme gaspillage de calculer le trajet de tous ces rayons en partant des sources lumineuses.
Pensez au Soleil qui éclaire la moitié de la Terre, mais vous ne percevez qu’une minuscule partie de ses
rayons.
L’objectif est de calculer l’image de la scène perçue depuis le point O à travers l’écran.
Idée générale : on lance un rayon depuis l’œil, à travers l’écran, jusqu’à intersecter un objet de la scène, on
remonte ensuite le trajet de la lumière.
On rencontre le mot frustrum pour l’ensemble de l’espace visible par l’œil à travers l’écran. D’un point de
vue mathématique, le frustrum est un prisme tronqué à base rectangulaire. Ainsi on s’assure de ne calculer
que des rayons visibles. Sur le dessin ci-dessous le prisme est tronqué au niveau de l’écran, mais s’étend
vers l’infini dans la direction du rectangle pointillé.
scène visible
O écran frustrum
• Depuis P on calcule la lumière reçue depuis la source lumineuse en lançant un rayon de P vers cette
source S. On en déduit la couleur Cl P(←O) de l’objet en P (perçue depuis le point O).
• On colorie le pixel Ei j selon cette couleur Cl. Si le rayon issu de O n’intersecte aucun objet, on colorie le
pixel Ei j avec la couleur de fond (noir par exemple).
On itère ces étapes pour chaque pixel Ei j de l’écran.
Ei j
.O
Luminosité ambiante.
La luminosité ambiante correspond à une lumière qui n’a pas de source précise et éclaire partout, et dans
toutes les directions, de la même façon.
.
P2
.
P1
La couleur perçue Clamb dépend de la couleur Clsource et de l’intensité isource de l’éclairage, mais aussi de la
couleur propre de l’objet Clobjet :
On rappelle que l’addition de deux couleurs, notée par ⊕cl , se fait en ajoutant terme à terme les composantes
r, g, b, sans dépasser 1. La multiplication, notée ⊗cl , s’effectue en multipliant terme à terme les composantes
r, g, b.
Luminosité diffuse.
La luminosité diffuse est une caractéristique associée aux matériaux mats et conduit à une réflexion de la
lumière dans toutes les directions. Par contre, l’intensité des rayons réfléchis dépend de l’orientation de la
surface par rapport au rayon lumineux.
S
. #»
ℓ2
#»
ℓ1
.
P2
n#»2
n#»1
.
P1
où isource et Clsource sont l’intensité et la couleur de la source lumineuse et Clobjet est la couleur propre de
l’objet.
Luminosité spéculaire.
La luminosité spéculaire s’observe sur les objets brillants, les rayons lumineux se réfléchissent autour de l’axe
principal de réflexion. La couleur perçue par luminosité spéculaire dépend de la position de l’observateur O.
S
.
r#»2
.
O #»
ℓ2
#»
ℓ1 r#»1
v#»2
. P2
n#»2
n#»1 v#»1
.
P1
Clspec = isource ( #»
r · #»
v )espec Clsource ⊗cl Clobjet
La formule dépend :
• de l’intensité isource et la couleur Clsource de la source lumineuse mais aussi de la couleur Clobjet propre à
l’objet,
#»
• de l’axe principal de réflexion r ,
#»
• de la direction v vers l’observateur,
• d’un exposant d’étalement espec .
#»
L’axe principal de la réflexion #»r est le vecteur symétrique de ℓ (qui pointe vers la source lumineuse) par
rapport à #» n (orthogonal à la surface).
#»
n
#» #»
ℓ r
.
Éclairage direct. Cette couleur perçue, obtenue comme somme des trois composantes ambiante, diffuse,
spéculaire, sera par la suite appelée la couleur obtenue par éclairage direct. Pour un point P d’un objet,
observé depuis un point O, cette couleur sera notée :
Cldir
P(←O)
La flèche dans la notation « P(← O) » est dans le même sens que le rayon du ray-tracing qui va de l’observateur
O vers le point P de l’objet (attention cette flèche va à rebours du rayon lumineux).
Nous allons maintenant apporter des améliorations à la version simplifiée du ray-tracing expliquée aupara-
vant.
LANCER DE RAYONS II 166
S
rayon d’ombre
.
O
En effet, il se peut qu’un autre objet soit intercalé entre P et S. Si cet objet est opaque cela signifie que la
source lumineuse est obstruée, autrement dit un rayon lumineux issu de S n’atteint pas le point P ; vous
êtes dans l’ombre de l’objet et il n’y a pas d’éclairage direct ; en l’absence de toute autre source lumineuse,
la couleur associée à ce point P est alors le noir. En général, on ajoute toujours une composante de lumière
ambiante, ce qui fait que même un objet à l’ombre sera légèrement visible.
.
S
. . . .
zone éclairée ombre zone éclairée
S’il y a plusieurs sources lumineuses, il faut lancer un rayon depuis P vers chacune des sources lumineuses
S1 , S2 . . . La couleur en P est alors la somme (au sens du chapitre « Lumière ») des couleurs résultant de
chaque source.
.
S1
. S2
Une source lumineuse peut ne pas être réduite à un point, cela peut être un disque (comme le Soleil
apparent) ou un rectangle (comme un projecteur carré). Chaque point de cette surface peut être considéré
comme une source de lumière ponctuelle ou directionnelle. L’intensité de la lumière qui atteint l’objet en un
point P est proportionnelle à la surface visible de la source lumineuse depuis ce point.
projecteur
Ci-dessous, ligne du haut : (a) une source lumineuse sans lumière ambiante, (b) une source lumineuse
avec une lumière ambiante. Ligne du bas : (c) deux sources lumineuses, (d) une source lumineuse non
ponctuelle.
O2
Q
O S
ect
ndir
i
rect
age
e di
rag
clai
ir
é
écla
P
O1
1. On lance un rayon r#»0 issu de O, on calcule le premier point P d’intersection avec un objet de la scène.
2. On calcule la luminosité associée à la lumière directe Cldir
P(←O)
(en lançant un rayon de P vers S).
3. On calcule le rayon r#»1 obtenu par une réflexion parfaite de r#»0 selon la normale en P. On calcule le
premier point Q d’intersection de r#» avec un objet de la scène.
1
dir
4. On calcule la luminosité associée à la lumière directe en Q perçue depuis P : ClQ(←P) (en lançant un
rayon de Q vers S).
5. On calcule la composante de luminosité indirecte en P issue de Q comme une fraction de la composante
précédente : Clindir
P(→Q)
dir
= kQ ClQ(←P) où kQ est un coefficient, appelé facteur de réflexivité.
6. La luminosité totale perçue en P est la somme de la luminosité directe et indirecte : Cl P = Cldir indir
P ⊕cl Cl P .
Q
#» S
ℓQ
O
r#»1
#»
#»
n ℓP
r#»0
Ci-dessous à gauche, un cube avec un éclairage orienté vers le côté droit, la face du dessus et celle de
gauche ne sont pas éclairées. Sur la figure de droite, on rajoute une sphère qui réfléchit la lumière, la face
supérieure du cube est alors éclairée par une lumière indirecte.
LANCER DE RAYONS II 169
O1
Q1
O3
Q3
r#»2
r#»1 r#»3
O
#»
ℓQ 3
Q2
r#»0 O2
P
O
2.6. Transparence
Nous allons étudier la propriété de transparence. Ci dessous : (a) deux tores opaques, (b) un seul tore
transparent (sans changement milieu), (c) un tore est en verre (d’indice n ≃ 1.4).
Nous avons déjà étudié la réflexion d’un rayon dans le chapitre « Lumière » : un rayon arrivant sur une
surface rebondit dans la direction symétrique par rapport à la normale.
LANCER DE RAYONS II 171
#»
n
θ1 milieu d’indice n1
θ θ
θ2 milieu d’indice n2
Réflexion
Réfraction
Nous étudierons plus tard la réfraction (voir la chapitre « Physique ») : lorsqu’un rayon change de milieu,
par exemple il passe de l’air à l’eau ou bien traverse du verre, sa trajectoire est déviée. L’angle de déviation
est régi par la loi de Snell-Descartes :
n1 sin θ1 = n2 sin θ2
où n1 et n2 sont les indices qui dépendent du milieu (mais aussi de la longueur d’onde du rayon).
Pour un matériau transparent, par exemple du verre, les deux phénomènes se produisent : une partie du
rayon est réfléchie, l’autre est réfractée. De plus une partie de l’énergie du rayon est absorbée par le matériau
(ce qui se traduit dans nos calculs par le facteur k ⩽ 1).
r#»0 r#»1
r#»2
Rayon réfléchi et rayon réfracté
Conclusion. Dorénavant lorsqu’un rayon atteint un objet ayant des propriétés de transparence il faut relancer
deux rayons depuis le point d’impact : un rayon réfléchi et un rayon réfracté.
#»
Il y a une exception que l’on fera : lorsqu’on lance le rayon d’ombre ℓ P , on considère qu’il se dirige tout
droit vers la source lumineuse, si ce rayon rencontre un objet translucide on peut éventuellement atténuer
la luminosité.
S
.
objet transparent
#»
ℓP
.P
éclairé partiellement éclairé éclairé
LANCER DE RAYONS II 172
Exercice.
1. Sur la figure de gauche ci-dessous, tracer les rayons correspondant à l’éclairage direct d’un point de la
surface du lac, puis faire la même chose avec un point de la surface de la montagne.
Scène
2. Sur la figure de gauche ci-dessous, tracer les rayons correspondant à l’éclairage indirect d’un point de la
surface du lac où apparaît le reflet de la montagne.
Scène
3. Sur la figure de gauche ci-dessous, tracer les rayons correspondant à l’éclairage du poisson par transpa-
rence.
Image – Transparence
Scène
Complications.
Paroi. Lorsque le rayon traverse une paroi de verre alors il faut appliquer ce principe des deux côtés de la
paroi. Noter que le rayon traversant la paroi ressort parallèlement au rayon incident.
LANCER DE RAYONS II 173
r#»0 r#»1
. r#»1 ′
r#»2
.
r#»2 ′
Réflexion totale. Lorsqu’on lance un rayon sous l’eau avec un angle faible par rapport à l’horizontale le
comportement est différent : le rayon est complètement réfléchi, c’est le phénomène de réflexion totale que
vous pouvez observer du fond de l’eau en levant la tête vers la surface qui a alors l’allure d’un miroir.
r#»0 r#»1
Réflexion totale
Ces phénomènes de réflexion/réfraction expliquent la formation des arcs-en-ciel, en effet les rayons se
réfractent différemment selon leur couleur. La lumière blanche du Soleil, constituée de rayons de toutes les
couleurs, entre dans une goutte d’eau, les rayons sont plus ou moins réfractés selon leur longueur d’onde, il
y a ensuite une réflexion interne à la goutte puis une nouvelle réfraction qui sépare davantage les rayons.
On retrouvera ce phénomène dans le chapitre « Physique » avec l’expérience du prisme de Newton.
4. Par un appel récursif couleur(Q1,P), on calcule la couleur ClQ 1 (←P) en Q 1 perçue depuis P.
5. On calcule la couleur indirecte en P issue de Q 1 :
Clindir
P(→Q )
= kQ 1 ClQ 1 (←P) .
1
6. Si l’objet a des propriétés de transparence on note r#»2 le rayon obtenu par réfraction de r#»0 en P, on
calcule Q 2 le premier point d’intersection de r#»2 avec la scène.
7. Par un appel récursif couleur(Q2,P) on calcule la couleur ClQ 2 (←P) en Q 2 perçue depuis P.
8. On calcule la couleur indirecte en P issue de Q 2 :
Clindir
P(→Q )
= kQ 2 ClQ 2 (←P) .
2
9. On renvoie la couleur Cl P(←O) comme somme de la couleur directe et des couleurs indirectes :
Cl P(←O) = Cldir ⊕ Clindir
P(←O) cl
⊕ Clindir
P(→Q ) cl P(→Q )
.
1 2
LANCER DE RAYONS II 175
Q1
S
O
r#»1
r#»0
P
r#»2
Q2
Condition(s) d’arrêt. Les rayons pouvant rebondir une infinité de fois, la condition d’arrêt est importante.
La condition la plus simple est de définir à l’avance un nombre maximal de rebonds possibles, autrement dit
de limiter la profondeur des appels récursifs. On peut en plus stopper le processus dès que la luminosité
indirecte va être faible et ne contribue presque plus à l’éclairement. On peut par exemple arrêter les appels
récursifs dès que le produit des constantes de réflexivité est suffisamment petit : kQ i kQ i · · · kQ i ⩽ ε.
1 2 n
Arbre de récursivité. L’arbre suivant montre la succession des points où il faut calculer la lumière directe
afin d’obtenir l’éclairage indirect en P.
Q1 Q2
Q 11 Q 12 Q 21 Q 22
C . P
#»
.
S
v .
P
.B
.A
#»
v AC
.P
#»
A uAB
3.2. Déterminant 3 × 3
Rappelons la formule du déterminant, uniquement dans le cas d’une matrice 3 × 3.
Si M est une matrice 3 × 3 :
a11 a12 a13
M = a21 a22 a23
a31 a32 a33
alors le déterminant se calcule selon la formule :
det(M ) = a11 a22 a33 + a12 a23 a31 + a13 a21 a32 − a31 a22 a13 − a32 a23 a11 − a33 a21 a12 .
Il existe d’autres façons de calculer un déterminant, on renvoie à un cours d’algèbre linéaire.
Rappelons cependant l’interprétation géométrique en termes de vecteurs. Soient trois vecteurs de l’espace
#»
u , #»
v , #»
w. On forme la matrice M de taille 3 × 3 en juxtaposant les vecteurs #»
u , #»
v , #»
w considérés comme des
vecteurs colonnes.
#»
u #»
v #»
w
#»
w
a11 a12 a13
#»
v
M=
a21 a22 a23
a31 a32 a33
#»
u
Y Y Y
y1 a12 a13 a11 y1 a13 a11 a12 y1
M1 = M2 = M3 =
y2 a22 a23 a21 y2 a23 a21 a22 y2
y3 a32 a33 a31 y3 a33 a31 a32 y3
LANCER DE RAYONS II 178
La règle de Cramer va nous permettre de calculer la solution du système dans le cas où det M ̸= 0 en
fonction des déterminants des matrices M et M j .
Théorème 1 (Règle de Cramer).
Soit M X = Y un système de 3 équations à 3 inconnues. Supposons que det M ̸= 0. Alors l’unique solution
(x 1 , x 2 , x 3 ) du système est donnée par :
det M1 det M2 det M3
x1 = x2 = x3 = .
det M det M det M
Exemple.
Résolvons le système suivant :
−2x 1 + 4x 2 − x 3 = 10
x1 + 3x 3 = 3
x1 − 2x 2 + 3x 3 = 4.
On a
−2 4 −1 10
M = 1 0 3 Y =3
1 −2 3 4
10 4 −1 −2 10 −1 −2 4 10
M1 = 3 0 3 M2 = 1 3 3 M3 = 1 0 3
4 −2 3 1 4 3 1 −2 4
et
det M = −10 det M1 = 78 det M2 = 5 det M3 = −36.
La solution est alors :
det M1 78 39 det M2 5 1 det M3 −36 18
x1 = = =− x2 = = =− x3 = = = ·
det M −10 5 det M −10 2 det M −10 5
4. Boites englobantes
4.1. Principe
Calculer l’intersection d’un rayon avec un objet géométrique, ou même juste savoir si cette intersection
existe, peut être coûteux en calculs. On renvoie par exemple au calcul de l’intersection d’un rayon avec une
sphère, expliqué dans le chapitre « Lancer de rayons I ». Heureusement pour certains objets il est très facile
de décider si le rayon coupe ou pas cet objet : le meilleur exemple est le cas d’une boite. Rappelons qu’une
boite 2D est simplement un rectangle dont les bords sont parallèles aux axes horizontaux et verticaux. Une
boite 3D est un parallélépipède dont les faces sont parallèles aux plans de coordonnées. Nous avons vu,
toujours dans le chapitre « Lancer de rayons I », comment calculer l’intersection d’un rayon et d’une boite.
z
y
B
B
A
A
x
y
x
Considérons un objet O d’une scène. On lance des rayons. Si l’objet n’est pas trop gros, la plupart des rayons
ne vont pas couper l’objet. On souhaite donc écarter rapidement un maximum de rayons inutiles. L’idée est
la suivante : on englobe l’objet O dans une boite B. Il est évident que :
LANCER DE RAYONS II 179
Bien sûr la réciproque n’est pas vraie. Donc si un rayon coupe la boite, il faut se lancer dans les calculs plus
compliqués pour savoir si le rayon coupe l’objet ou pas. Évidemment on a tout intérêt à ce que la boite
englobante soit la plus adaptée possible en minimisant ses dimensions pour « coller » à l’objet.
B
Le rayon coupe la
O
boite mais pas l’objet
Le rayon coupe
la boite et l’objet
Rectangle Cercle
Boite Tranches
Parallélépipède Sphère
Intersection
Une tranche
de deux tranches
LANCER DE RAYONS II 180
On pourrait imaginer des polygones ou polyèdres convexes (on renvoie au chapitre « Triangulation » pour le
calcul de l’enveloppe convexe).
Le plus utilisé est aussi le plus simple : la boite. L’encodage d’une boite par la convention « AABB » correspond
aux coordonnées du coin inférieur gauche A et du coin supérieur droit B du rectangle, il y a simplement 4
réels (x A, yA, x B , yB ). En dimension 3, on prend les coordonnées de deux sommets sur une diagonale, il y a
6 réels (x A, yA, zA, x B , yB , zB ). (Voir les dessins ci-dessus du paragraphe « Principe ».)
4.3. Hiérarchie
L’idée de volume englobant prend davantage d’intérêt pour les scènes complexes où l’on peut alors englober
les boites dans d’autres boites afin de retarder au maximum les calculs compliqués. Si la scène est composée
de beaucoup d’objets, un rayon va couper seulement une petite partie d’entre eux, et donc on cherche à
écarter rapidement un maximum d’objets qui ne coupent pas ce rayon.
Nous allons construire une hiérarchie (BVH, Bounding Volume Hierachy) :
• On sépare les objets de la scène en deux parties, par exemple on englobe les objets de gauche dans un
boite et les objets de droite dans une autre boite (quitte à découper en deux un objet qui se trouverait
au milieu).
• On sépare les objets de gauche dans deux boites une boite en haut à gauche, une boite en bas à gauche.
On fait de même avec la boite de droite.
• On itère jusqu’à avoir un seul objet par boite.
Scène Hiérachie
On représente ces inclusions de boites par un arbre binaire (chaque sommet a au plus deux enfants) : une
boite correspond à un sommet et les boites incluses sont les descendants de ce sommet. Les feuilles sont les
boites ne contenant qu’un seul objet.
Lorsqu’on lance un rayon, on teste s’il coupe une boite :
• si ce n’est pas le cas, le rayon ne coupe aucun objet inclus dans la boite,
• si c’est le cas on teste l’intersection du rayon avec les deux sous-boites. . .