0% ont trouvé ce document utile (0 vote)
289 vues185 pages

Livre Mathgame

Transféré par

nabillatex34
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
289 vues185 pages

Livre Mathgame

Transféré par

nabillatex34
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

M AT H G A M E

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.

Théorie des jeux


Nous survolons les différents types de jeux, leurs caractéristiques, les différentes stratégies possibles et les
équilibres possibles entre adversaires.

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

Savoir mesurer et calculer les angles est fondamental !

1. Sinus, cosinus, tangente

1.1. Cercle trigonométrique


Le cercle trigonométrique est le cercle centré à l’origine et de rayon 1. Il est orienté dans le sens trigonomé-
trique (le sens inverse des aiguilles d’une montre) à partir du point (1, 0). Sur le cercle ci-dessous, on a
placé quelques points avec les angles correspondants en radians (de 0 à 2π) et en degrés (de 0◦ à 360◦ )
ainsi que leurs coordonnées (x, y).

(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 .

Dans ce cours, nous utiliserons principalement le radian comme unité de mesure des angles.

1.2. Sinus, cosinus, tangente


Le point M du cercle trigonométrique correspondant à l’angle θ a pour coordonnées (cos(θ ), sin(θ )).
Autrement dit, l’abscisse de M est cos(θ ) et l’ordonnée de M est sin(θ ).

y
T
1
M
sin(θ )
tan(θ )

θ x
O cos(θ ) 1

Pour tout θ n’appartenant pas à {. . . , − π2 , π2 , 3π 5π


2 , 2 , . . .} la tangente est définie par
sin(θ )
tan(θ ) = .
cos(θ )
La droite (OM ) coupe la droite d’équation (x = 1) en T , l’ordonnée du point T est tan(θ ).
Voici les valeurs des sinus et cosinus pour les angles remarquables.

(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

Les formules de base avec sinus et cosinus sont :

cos2 (x) + sin2 (x) = 1


cos(−x) = cos(x)
cos(x + 2π) = cos(x)
sin(−x) = − sin(x)
sin(x + 2π) = sin(x)

Il en existe beaucoup d’autres !


TRIGONOMÉTRIE 4

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

Voici un zoom sur l’intervalle [−π, π].


y
+1

sin(x) x
−π − π2 0 π π
2

−1 cos(x)

La fonction x 7→ tan(x) est périodique de période π ; c’est une fonction impaire.

tan(x)
y

+1

−π 0 π
− π2 π
2

2
x
−1

Voici les dérivées :


cos′ (x) = − sin(x)
sin′ (x) = cos(x)
1
tan′ (x) = 1 + tan2 (x) =
cos2 (x)
TRIGONOMÉTRIE 5

2. Arcsinus, arccosinus, arctangente


Les fonctions trigonométriques inverses permettent de retrouver un angle connaissant la valeur du sinus
(ou du cosinus ou de la tangente).

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

On a donc, par définition de la bijection réciproque :



sin arcsin(x) = x (x ∈ [−1, 1])
(x ∈ [− π2 , + π2 ])

arcsin sin(x) = x
Autrement dit : h π πi
x ∈ − ,+
Si sin(x) = y ⇐⇒ x = arcsin( y)
2 2
Terminons avec la dérivée de arcsin :
1
arcsin′ (x) = p (x ∈] − 1, 1[)
1 − x2

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, π])

Si x ∈ [0, π] cos(x) = y ⇐⇒ x = arccos( y)

−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

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

2.4. La fonction arctan2


Détaillons le fonctionnement de la fonction arctan2 qui est essentielle en programmation, mais rarement
expliquée dans les cours de mathématiques. L’objectif est tout simplement de retrouver l’angle θ du point
#» # »
M de coordonnées (x, y) (plus précisément l’angle entre i qui dirige l’horizontale et OM ).

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

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

Voici la définition de arctan2( y, x) à l’intérieur de chacun des quatre quadrants :



y

 arctan x si x > 0, y > 0

y
x +π si x < 0, y > 0

− arctan
arctan2( y, x) = y

 − arctan x si x > 0, y < 0

y
x −π si x < 0, y < 0

arctan
TRIGONOMÉTRIE 8

Sur les axes : 


arctan2(0, x) = 0


si x > 0
arctan2(0, x) = π

si x < 0
π

arctan2( y, 0) = 2 si y > 0

arctan2( y, 0) = − π

si y < 0
2
On rappelle que la fonction n’est pas définie en (0, 0). Par définition la fonction arctan2 renvoie un angle θ
appartenant à ] − π, +π]. On peut facilement obtenir un angle de l’intervalle [0, 2π[ : si θ < 0, on change
θ en θ + 2π.

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

Coordonnées polaires vers coordonnées cartésiennes.


On retrouve les coordonnées cartésiennes (x, y) à partir des coordonnées polaires [r : θ ] par les formules
x = r cos(θ ) et y = r sin(θ ).

Coordonnées cartésiennes vers coordonnées polaires.


On retrouve r et θ à partir de (x, y) par les formules suivantes :
Æ
r = x 2 + y 2,
TRIGONOMÉTRIE 9

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

4. Nombres complexes et trigonométrie

4.1. Écriture trigonométrique


• Un nombre complexe est un couple (a, b) ∈ R2 que l’on notera a + ib.
• Le nombre complexe i vérifie la relation i2 = −1.
iR

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

— r est en fait le module de z : r = |z|,


— θ est un argument de z, on le note arg(z) (en radians).
• Nous définissons la notation exponentielle par
eiθ = cos(θ ) + i sin(θ )
et donc tout nombre complexe s’écrit :
z = r eiθ
où r = |z| est son module et θ = arg(z) est un de ses arguments.

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 )

4.3. Transformations géométriques


Voici quelques transformations élémentaires exprimées à l’aide des nombres complexes. On identifie un
nombre complexe z = x + i y avec le point M (x, y) ; ainsi une transformation du plan correspond à une
fonction z 7→ f (z).

1. Translation. La translation de vecteur ( ab ) correspond à l’addition du nombre complexe z0 = a + ib.

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

3. Homothétie. L’homothétie centrée à l’origine et de rapport r ∈ R∗ correspond à la multiplication par le


réel r.

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

Si on souhaite une similitude centrée en z0 = a + ib alors la transformation est z = w(z − z0 ) + z0 .

5. Trigonométrie dans l’espace

5.1. Coordonnées cylindriques


Les coordonnées cylindriques (r, θ , z) sont un autre système de coordonnées que les coordonnées cartésiennes
classiques (x, y, z). On obtient les coordonnées cartésiennes à partir des coordonnées cylindriques par les
formules suivantes :
 x = r cos(θ )

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

5.2. Coordonnées sphériques


Les coordonnées sphériques (r, ϕ, λ) sont la donnée d’une altitude r, d’une latitude ϕ et d’une longitude
λ. Elles permettent de se repérer dans l’espace et particulièrement sur une sphère (r, son rayon, est alors
fixe). Ce sont les coordonnées naturelles des navigateurs. Le passage des coordonnées sphériques vers les
coordonnées cartésiennes s’exprime par :
 x = r cos(ϕ) cos(λ)

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

Les formules inverses sont :


 r = x 2 + y 2 + z2
 p

ϕ = arcsin zr


λ = arctan2( y, x)

Chapitre

2
Vecteurs

Nous étudions les vecteurs du plan, de l’espace et en n’importe quelle dimension.

1. Vecteurs du plan

1.1. Opérations sur les vecteurs


#» #»
Dans le plan, on considère (O, i , j ) un repère orthonormé direct. Un vecteur #»
u est défini par des coordon-
nées (x, y) ∈ R2 par rapport à ce repère. Cela correspond à l’égalité :
#» #» #»
u =x i +y j.


u
y


j
O #» x
i

On peut aussi noter les coordonnées verticalement :


 

u=
x
.
y
Plusieurs opérations sont définies sur les vecteurs. Soient #»
u = (x, y) et #»
v = (x ′ , y ′ ) deux vecteurs, et soit
λ ∈ R un scalaire.
#» #»
• L’addition de u et v est définie par

u + #»
v = (x + x ′ , y + y ′ ).
• La multiplication par un scalaire λ est définie par
λ #»
u = (λx, λ y).
• Le vecteur nul est défini par

0 = (0, 0).

• Le vecteur opposé de u est défini par
− #»
u = (−x, − y).
VECTEURS 18

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∥

On dira qu’un vecteur est unitaire si sa norme vaut 1. Autrement dit, #»


u = (x, y) est unitaire si et seulement
si x + y = 1. Ci-dessous des exemples de vecteurs unitaires.
2 2


u

1 x


Soit #»
u un vecteur non nul quelconque. La normalisation de #»
u est le vecteur unitaire u
u ∥.
∥ #»
VECTEURS 19

1.3. Produit scalaire


Le produit scalaire de deux vecteurs #»
u et #»
v est défini par

u · #»
v = x x ′ + y y ′.
Le produit scalaire mesure à quel point deux vecteurs ont la même direction. On le note aussi 〈 #»
u | #»
v 〉.
Le résultat fondamental est :
Proposition 1.

u · #»
v = ∥ #»
u ∥ ∥ #»
v ∥ cos(θ )

où θ est l’angle entre #»


u et #»
v.


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

Une application est le résultat suivant.


Proposition 3.
La distance entre un point A(x A, yA) quelconque et la droite D d’équation a x + b y + c = 0 est donnée par :
|a x A + b yA + c|
d(A, D) = p .
a2 + b2

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#»
//

Le vecteur v# /»/ est appelé projeté orthogonal de #» v sur #»


u . Il se calcule par :

u · #»
v# /»/ = #» 2 #»
v
u.
∥u∥
La preuve découle simplement du fait que dans le triangle rectangle suivant on a AH = AB cos θ .

θ
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

Alors l’intensité lumineuse i reçue en P est donnée par :



i = i0 ℓ · #»
n = i0 cos θ .
#» #»
où θ est l’angle entre ℓ et n .

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.

2. Vecteurs dans l’espace

2.1. Opérations sur les vecteurs


#» #» #»
Considérons l’espace R3 muni du repère orthonormé direct (O, i , j , k ).
#» #» #» #» #»
• Un vecteur u de l’espace est un triplet (x, y, z) de nombres réels de sorte que u = x i + y j + z k .


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 ∥

2.2. Produit vectoriel


Le produit vectoriel #»
u ∧ #»
v est un vecteur orthogonal à #»u et #»
v . Il se calcule par la formule :
   ′  ′
yz − z y ′

x x

u ∧ #»
v =  y  ∧  y ′  =  z x ′ − xz ′ 
z z′ x y′ − y x′


u ∧ #»
v


v


u

Vous rencontrerez peut-être aussi la notation anglo-saxonne #»


u × #»
v (cross-product).

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

Repère direct Repère indirect


VECTEURS 25

z
y

Régle de la main droite

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 =

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

2.3. Produit mixte


Le produit mixte ou déterminant des vecteurs #» u , #»
v et #»
w est le nombre défini par :
det( u , v , w) = u · ( #»
#» #» #» #» v ∧ #»
w).
Il est donc formé par un produit vectoriel suivi d’un produit scalaire. Le nom anglais est triple product.
Proposition 5.
Le produit mixte mesure le volume du parallélépipède formé par les trois vecteurs.


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

3.1. Espace vectoriel


On généralise ces notions en considérant des espaces de dimension n pour tout entier positif n = 1, 2, 3, 4, . . .
Il n’y a aucune difficulté mathématique excepté le fait qu’il n’est plus possible de visualiser les vecteurs à
! x1
x2
partir de la dimension 4. Les éléments de l’espace de dimension n sont les n-uples .. de nombres réels.
.
xn
x1 !
x2
L’espace de dimension n est noté Rn . Comme en dimensions 2 et 3, le n-uple .. dénote aussi bien un
.
xn
point qu’un vecteur de l’espace de dimension n.
x1 ! y1 !
x2 y2
Soient u = .. et v = .. deux vecteurs de Rn . L’usage est d’abandonner la flèche pour noter un
. .
xn yn
vecteur.
VECTEURS 27

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.2. Norme et produit scalaire


• Le produit scalaire usuel de u = (x 1 , . . . , x n ) et v = ( y1 , . . . , yn ), noté u · v (ou bien parfois 〈u | v〉), est
défini par
u · v = x 1 y1 + · · · + x n yn .
• La norme euclidienne sur R est la norme associée à ce produit scalaire. Pour u ∈ Rn , la norme
n

euclidienne de u, notée ∥u∥, est définie par


p q
∥u∥ = u · u = x 12 + · · · + x n2 .
• La distance entre le point A = (a1 , . . . , an ) et le point M = (x 1 , . . . , x n ) est
Æ
∥M − A∥ = (x 1 − a1 )2 + · · · + (x n − an )2 .
Terminons avec une inégalité qui majore le produit scalaire de deux vecteurs en fonction de leurs normes.
Théorème 2 (Inégalité de Cauchy-Schwarz).
Pour u et v deux vecteurs de Rn , on a :
|u · v| ⩽ ∥u∥ ∥v∥.
VECTEURS 28

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

Ainsi en coordonnées cartésiennes la rotation d’angle θ s’écrit :


x cos θ − y sin θ
   
x
7−→
y x sin θ + y cos θ

1.3. Produit de matrices


Le produit AB de deux matrices A et B est défini si et seulement si le nombre de colonnes de A est égal au
nombre de lignes de B.
Définition (Produit de deux matrices).
Soient A = (ai j ) une matrice n × p et B = (bi j ) une matrice p × q. Alors le produit C = AB est une matrice
n × q dont les coefficients ci j sont définis par :

p
X
ci j = aik bk j
k=1

On peut écrire le coefficient de façon plus développée, à savoir :


ci j = ai1 b1 j + ai2 b2 j + · · · + aik bk j + · · · + aip b p j .
Si on note L i la i-ème ligne de la matrice A et C j la j-ème colonne de la matrice B, alors
ci j = L i · C j .
Ainsi chaque coefficient de C est le résultat d’un produit scalaire entre une ligne de A avec une colonne de B.
 
 

 Cj = B

Li · C j
 

   

   
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

1.5. Opérations sur les matrices


Le produit de deux matrices est une opération compliquée mais la somme de deux matrices est une opération
simple. Soient A et B deux matrices ayant la même taille n × p. Leur somme C = A + B est la matrice de
taille n × p définie par
ci j = ai j + bi j .
En d’autres termes, on somme coefficients par coefficients. On a bien A + B = B + A.

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

1.6. Matrice d’un système linéaire


Un système d’équations linéaires peut s’écrire simplement à l’aide d’une matrice. Considérons le système
linéaire ayant n équations et p inconnues (x 1 , . . . , x p ) :
a11 x 1 + a12 x 2 + · · · + a1p x p = b1



a21 x 1 + a22 x 2 + · · · + a2p x p = b2


 ...
an1 x 1 + an2 x 2 + · · · + anp x p = bn

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

2.1. Matrices carrées


Si n = p (même nombre de lignes que de colonnes), la matrice est dite matrice carrée. On note alors
simplement Mn au lieu de Mn,n :
 
 a11 a12 ... a1i . . . a1n 
 
 

 a21 a22 ... a2i . . . a2n 

 

 ... ... ... ... ... ... 

 
 
 ai1 ai2 ... aii ... ain 
 
 

 ... ... ... ... ... ... 

 
an1 an2 . . . ani . . . ann
 

Les éléments a11 , a22 , . . . , ann forment la diagonale principale de la matrice.


La matrice carrée suivante s’appelle la matrice identité :
 
1 0 ... 0
 0 1 ... 0 
In =  . . .
 
 .. .. . . ... 

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

2.2. Matrices triangulaires, matrices diagonales


Soit A une matrice de taille n × n. On dit que A est triangulaire inférieure si ses éléments au-dessus de la
diagonale sont nuls, autrement dit :
i < j =⇒ ai j = 0.
Une matrice triangulaire inférieure a la forme suivante :
 
a11 0 · · · · · · 0
. ..
 a21 a22 . . .
 

 . .. .. .. .. 
 . . .
 . . .


 . . .. 
 .. .. . 0 
an1 an2 · · · · · · ann

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

colonne de AT (et réciproquement la j-ème colonne de AT est la j-ème ligne de A).


Remarque : il existe aussi la notation tA pour la transposée de la matrice A.
MATRICES 37

En particulier la transposition transforme un vecteur ligne en un vecteur colonne et réciproquement :


 
x1
x 
  2
Si X = x1 x2 · · · xn alors XT =  . .
 .. 
xn

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

L’opération de transposition obéit aux règles suivantes :


1. (A + B) T = AT + B T
2. (αA) T = αAT
3. (AT ) T = A
4. (AB) T = B T AT
Notez bien l’inversion : (AB) T = B T AT .

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

Oublions la translation et concentrons-nous sur l’application F définie par


    
x a b x
7→ .
y c d y
Nous avons F (0, 0) = (0,
0), F (1, 0) = (a, c), F (0, 1) = (b, d). 
En termes de vecteurs, nous avons juste
 écrit
1 a 0
que l’image du vecteur était le premier vecteur colonne , alors que l’image du vecteur est le
0 c 1
 
b
second vecteur colonne . L’image du carré unitaire est donc un parallélogramme.
d

(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

4.1. Inverse d’une matrice


Soit A une matrice carrée de taille n × n. S’il existe une matrice carrée B de taille n × n telle que
AB = I et BA = I,
alors on dit que A est inversible. On appelle B l’inverse de A et on la note A−1 .
Proposition
 3 (Cas
 des matrices 2 × 2).
a b
Soit A = . Si ad − bc ̸= 0, alors A est inversible et
c d

 
−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

2. Soient A et B deux matrices inversibles de même taille. Alors AB est inversible et

(AB)−1 = B −1 A−1

Pour l’inverse d’un produit il faut bien faire attention à l’inversion de l’ordre !

4.2. Matrices inversibles et systèmes linéaires


Considérons le cas où le nombre d’équations égale le nombre d’inconnues :
     
a11 . . . a1n x1 b1
 a21 . . . a2n   x2   b2 
 =  .
     
 .. ..   .. ..
 . .   .   . 
an1 . . . ann xn bn
| {z } | {z } | {z }
A X B
Alors A ∈ Mn est une matrice carrée et B un vecteur de Mn,1 . Pour tout second membre, nous pouvons
utiliser les matrices pour trouver la solution du système linéaire.
Proposition 5.
Si la matrice A est inversible, alors la solution du système AX = B est unique et est :

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

Voici les matrices de rotations autour de l’axe (O y) et de l’axe (Oz) :


cos(θ ) 0 sin(θ ) cos(θ ) − sin(θ ) 0
   

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.

1.6. Matrice quelconque


De façon générale une transformation vectorielle est l’application F : R3 → R3 , X 7→ Y où :
Y = AX avec A ∈ M3 (R).
On appelle aussi la fonction F une application linéaire.

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

Soit F : R3 → R3 une transformation affine ou vectorielle. Notons A la matrice de cette transformation. Le


déterminant det(A) de cette matrice est important dans l’étude de la transformation F .
Proposition 1.
La transformation F est bijective si et seulement si det(A) ̸= 0.
Proposition 2.
Si E est un ensemble dont le volume est V alors F (E) est un ensemble dont le volume est | det(A)| × V .
Rappelons que si A ∈ M3 (R) est une matrice 3 × 3 :
 
a11 a12 a13
A = a21 a22 a23 
a31 a32 a33
alors le déterminant se calcule selon la formule :
det(A) = a11 a22 a33 + a12 a23 a31 + a13 a21 a32 − a31 a22 a13 − a32 a23 a11 − a33 a21 a12 .
TRANSFORMATIONS DE L’ESPACE 45

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

2.1. Changement de coordonnées


Soit B = (e#»1 , e#»2 , e#»3 ) une base de R3 . Considérons un vecteur #» v de R3 et notons X les coordonnées de #»
v
dans la base B, c’est-à-dire :
 
x
#» #» #»
v = x e1 + y e2 + z e3#» et X = y .

z
#» #» #»
Fixons maintenant une seconde base B′ = ( f1 , f2 , f3 ) de R3 . Le même vecteur #» v n’a pas les mêmes

coordonnées dans cette nouvelle base. Notons X les coordonnées de v dans cette base B′ , c’est-à-dire :

 ′
x
#» ′ #» ′ #» ′ #» ′
v = x f1 + y f2 + z f3 et X = y ′ .

z′

v
e#»3


f1


f2
e#»2

e#»1 #»
f3

Quel est le lien entre X et X ′ ?


La matrice de passage P de la base B vers la base B′ est la matrice carrée de taille 3 × 3 dont la j-ème
colonne est formée des coordonnées du j-ème vecteur de la base B′ , par rapport à la base B.
On résume en :
La matrice de passage P contient – en colonnes – les coordonnées des vecteurs de la
nouvelle base B′ exprimés dans l’ancienne base B.

Voici le lien entre les coordonnées dans l’ancienne et la nouvelle base :


Proposition 3.
X = PX ′

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

2.2. Changement de base pour les fonctions


Soit F : R3 → R3 une application linéaire (c’est-à-dire une transformation vectorielle). Notons A la matrice
de F dans la base B. Ainsi si f ( #»
v ) = #»
w et que #»
v a pour coordonnées X et #»
w a pour coordonnées Y (toujours
dans la même base B) alors

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 :

(une matrice + le choix d’une base) ←→ une application linéaire

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

Comme auparavant, la matrice P est la matrice de passage de la base B à la base B′ .


TRANSFORMATIONS DE L’ESPACE 47

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

2.3. Changement de base orthonormée


On rappelle qu’une base B est orthonormale si chaque vecteur est unitaire et si deux vecteurs distincts sont
orthogonaux.
Une matrice A est orthogonale si AT A = I, autrement dit si A−1 = AT . De façon équivalente, une matrice
A est orthogonale si ses vecteurs colonnes forment une base orthonormale. On note O(3) l’ensemble des
matrices orthogonales de taille 3 × 3.
Proposition 5.
Si B et B′ sont deux bases orthonormales alors la matrice de passage P de B à B′ est une matrice orthogonale.

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).

(x, y) 7−→ (2x, y)


TRANSFORMATIONS DE L’ESPACE 48

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.

3.2. Coordonnées homogènes du plan


Définition

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 :

(x : y : w) = (λx : λ y : λw) pour tout λ ∈ R∗

Par exemple (2 : −1 : 1) = (4 : −2 : 2) = (−6 : 3 : −3) et (2 : 3 : 0) = (4 : 6 : 0). Attention, le point


« (0 : 0 : 0) » n’existe pas.
On appelle plan projectif , noté RP 2 , l’ensemble de ces triplets (x : y : w).
TRANSFORMATIONS DE L’ESPACE 49

• 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)

points du plan affine


points à l’infini

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

Soit F : R2 → R2 une transformation affine du plan :


      
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
Si on note :      
a b e x
A= T= X=
c d f y
alors F (X ) = AX + T .

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 .

3.3. Coordonnées homogènes de l’espace


Ajoutons une dimension supplémentaire afin de définir les coordonnées homogènes dans l’espace.

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 :

(x : y : z : w) = (λx : λ y : λz : λw) pour tout λ ∈ R∗

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

Soit F : R3 → R3 une transformation affine de l’espace définie par :


F (X ) = AX + T
où A ∈ M3 (R) est une matrice 3 × 3 et T ∈ M3,1 (R) est un vecteur colonne de taille 3 correspondant à la
translation.
On note :
TRANSFORMATIONS DE L’ESPACE 52

 
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

La composition de transformations affines correspond à la multiplication des matrices homogènes associées.


Proposition 7.
Si F (X ) = AX + T et G(X ) = BX + S définissent deux transformations affines et que Ah et Bh sont leurs
matrices homogènes associées, alors la matrice homogène associée à F ◦ G (la transformation G suivie de la
transformation F ) est Ah Bh .
Proposition 8.
Si F (X ) = AX + T est une transformation bijective, c’est-à-dire la matrice A est inversible, alors la matrice
homogène associée à F −1 est :
 −1
−A−1 T

A
.
0 1

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.

1. Rotation suivant un axe

1.1. Rappels : rotation dans le plan


Commençons par exprimer une rotation dans le plan. Ce plan est muni d’un repère orthonormé direct
(O x y). Une rotation centrée à l’origine et d’angle θ est la transformation du plan qui envoie un point P de
coordonnées (x, y) sur le point Q de coordonnées (x ′ , y ′ ) avec :
 ′
x = x cos(θ ) − y sin(θ )
y ′ = x sin(θ ) + y cos(θ )

y
.
Q

θ
. P

.
O x

Il est plus facile d’exprimer une rotation à l’aide de la matrice :


cos(θ ) − sin(θ )
 
R(θ ) = .
sin(θ ) cos(θ )
Si on note    ′
x x
X= et Y= ,
y y′
alors l’action de la rotation s’écrit :
Y = RX .
Notations. Dans ce chapitre il va y avoir beaucoup de sinus et cosinus, nous abrégeons l’écriture par les
notations suivantes :

cθ = cos(θ ) sθ = sin(θ )
ROTATIONS DE L’ESPACE 55

Avec ces notations la matrice de rotation Rθ s’écrit simplement :


 
cθ −sθ
R(θ ) = .
sθ cθ
Sens trigonométrique. Nos angles sont orientés : un angle positif correspond à une rotation dans le sens
trigonométrique, un angle négatif à une rotation dans le sens des aiguilles d’une montre.

1.2. Rotation autour de l’axe x , y ou z


Une rotation de l’espace correspond à un mouvement circulaire autour d’un axe laissé fixe. Nous allons
définir les rotations par leur matrice associée. Dans la suite toutes les rotations auront des axes qui passent
par l’origine (on parle de rotations vectorielles). Une rotation quelconque s’obtient comme une rotation
vectorielle conjuguée avec une translation.


v

. .
Q
θ

. P

Rotation autour de l’axe x.


 
1 0 0
R x (θ ) = 0 cθ
 −sθ 
0 sθ cθ

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 .

Rotation autour de l’axe y.


 
cθ 0 sθ
R y (θ ) =  0 1 0
−sθ 0 cθ
(Attention aux signes.)
ROTATIONS DE L’ESPACE 56

z
Ry

Rotation autour de l’axe z.


 
cθ −sθ 0
Rz (θ ) = sθ
 cθ 0
0 0 1

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
+

1.3. Rotation autour d’un axe quelconque


Une rotation vectorielle quelconque est déterminée par :

• son axe, défini par un vecteur v = (vx , v y , vz ),
• un angle θ .
Pour simplifier les expressions, nous supposerons que le vecteur #» v est unitaire, c’est-à-dire vx2 + v 2y + vz2 = 1 .
La rotation d’axe défini par #»v (unitaire) et d’angle θ a pour matrice :
(1 − cθ )vx2 + cθ (1 − cθ )vx v y − sθ vz (1 − cθ )vx vz + sθ v 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 .

1.4. Formule de Rodrigues


Découvrons une autre façon d’obtenir la matrice de rotation autour d’un axe #»v (unitaire) quelconque.
v = Q #»
2
Notons I, Q #»
v et P #» v
les matrices suivantes :
     2 
1 0 0 0 −vz v y vx − 1 vx v y vx vz
I = 0 1 0 v =
2
v = Q #»
 vx v y v 2 − 1 v y vz 
Q #» P #» v =
 vz 0 −vx  y
0 0 1 −v y vx 0 vx vz v y vz vz2 − 1

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.

1.5. Retrouver l’axe et l’angle


Si on nous donne une matrice R en nous affirmant que c’est une matrice de rotation, alors comment retrouver
l’axe #»
v et l’angle θ ?
#» #»
• Retrouver un vecteur v dirigeant l’axe. Notons v un vecteur propre associé à la valeur propre λ = 1,

c’est-à-dire v est un vecteur non nul solution de :

(R − I) #»
v = 0.
On obtient cette solution #»
v en résolvant un système linéaire à 3 équations et 3 inconnues. On renvoie à
un cours d’algèbre linéaire pour les notions détaillées de valeurs propres/vecteurs propres.
Pour une matrice de rotation (autre que l’identité) il n’existe que deux vecteurs unitaires solutions qui
sont opposés : #»
v et − #»
v.
• Retrouver l’angle θ . On obtient facilement l’angle, au signe près, par la formule :
tr(R) = 1 + 2 cos(θ )
où tr(R) est la trace de la matrice R, c’est-à-dire la somme des éléments sur la diagonale.
Une autre méthode, consiste à choisir un vecteur #» u orthogonal à l’axe #»
v , à calculer R #»
u , puis à calculer
#» #»
l’angle θ entre u et R u .

1.6. Propriétés algébriques


L’opération inverse d’une rotation d’angle θ est évidemment une rotation d’angle −θ (et de même axe) : en
termes de matrices R(θ )−1 = R(−θ ). Toutes les matrices de rotation que nous avons vues jusqu’ici vérifient
la relation R(−θ ) = R(θ ) T et donc R(θ )−1 = R(θ ) T . En plus nos matrices vérifient det(R(θ )) = +1, ce qui
implique qu’une rotation préserve l’orientation. C’est avec ces relations qu’on définit algébriquement une
matrice de rotation.
Définition.
Une matrice R ∈ M3 (R) est une matrice de rotation si :
RR T = I et det(R) = +1.
Le groupe spécial orthogonal noté SO3 (R) est l’ensemble des matrices de rotation.
ROTATIONS DE L’ESPACE 58

Les propriétés de groupe impliquent :


Proposition 1.
Si R1 et R2 sont des matrices de rotations alors R1 R2 et R2 R1 sont aussi des matrices de rotations.
La composition de deux rotations de l’espace est une rotation de l’espace, mais ce n’est pas évident d’en
connaître l’axe et l’angle. La rotation de matrice R2 R1 correspond à l’action d’une rotation de matrice R1
suivie d’une rotation de matrice R2 . Alors que pour R1 R2 c’est dans l’ordre inverse. En général R1 R2 et R2 R1
sont deux matrices différentes (c’est-à-dire que SO3 (R) n’est pas un groupe commutatif).

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.

2.2. Angles d’Euler x - y -z


Commençons par la convention x- y-z par rotations extrinsèques. On fixe un repère orthonormé direct
(O x yz), dit repère absolu, qui ne va pas bouger au fil des opérations. Une rotation selon la convention
x- y-z par rotations extrinsèques est une rotation qui se décompose :

R = Rz (γ) R y (β) R x (α)

où α, β, γ sont des angles donnés.

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

2.3. Mouvements d’un avion


Pour diriger un avion, le pilote dispose de trois commandes qui orientent l’avion selon trois axes. On
considère un repère (OX Y Z), appelé repère relatif, qui est lié à l’avion (il tourne lorsque l’avion tourne).
L’axe X est dirigé dans le sens de l’avion, l’axe Y le long des ailes, et l’axe des Z selon la verticale de l’avion.
Les trois rotations sont :
• Rotation d’axe Z. Appelée lacet en aviation (yaw). Cela correspond au changement de direction vers la
droite ou vers la gauche.
• Rotation d’axe Y . Appelée tangage (pitch). Cela correspond à monter le nez de l’avion vers le haut ou
bien à le descendre vers le bas.
• Rotation d’axe X . Appelée roulis (roll). Cela correspond à monter l’aile droite et baisser l’aile gauche,
ou l’inverse, alors que l’axe longitudinal de l’avion reste fixe.
Rappelons que le repère (OX Y Z) est lié à l’avion, après chaque rotation le repère change de position par
rapport à un observateur situé au sol.

pitch

roll
yaw

yaw
roll
Z

pitch Y

2.4. Angles d’Euler z - y ′ - x ′′


Expliquons la convention z- y ′ -x ′′ par rotations intrinsèques. On fixe un repère orthonormé direct (O x yz),
dit repère absolu, qui ne va pas bouger au fil des opérations.

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é.

2.5. Équivalence entre x - y -z et z - y ′ - x ′′


Nous allons montrer que les conventions x- y-z et z- y ′ -x ′′ sont équivalentes :

Rz (γ) R y (β) R x (α) = R x ′′ (α) R y ′ (β) Rz (γ)

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 !

2.6. Blocage de cadran


Expliquons le blocage de cadran (gimbal lock) avec la convention z- y ′ -x ′′ . Imaginons un avion en position
verticale (« chandelle ») dans un repère absolu (O x yz). Pour le repère (O x ′′ y ′′ z ′′ ) lié à l’avion, l’axe x ′′
coïncide avec l’axe z. Il y a normalement trois rotations possibles avec la convention z- y ′ -x ′′ , mais ici comme
les axes z et x ′′ sont confondus, on a perdu un degré de liberté, il n’y a en fait que deux rotations possibles
(une autour de l’axe y ′ et une autour de l’axe z qui est aussi x ′′ ). Bien sûr il suffit d’effectuer une rotation
d’axe y ′ pour séparer de nouveau les axes z et x ′′ .
ROTATIONS DE L’ESPACE 62

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 ! ».

2.7. Retrouver les angles d’Euler


On nous donne une matrice de rotation R. Comment décomposer cette matrice selon la convention x- y-z :
R = Rz (γ) R y (β) R x (α) ?
Notons ri j les coefficients de R :
 
r11 r12 r13
R =  r21 r22 r23 
r31 r32 r33
Alors, en identifiant cette matrice avec la matrice obtenue au paragraphe 2.2, on obtient d’abord :
β = − arcsin(r31 )
(car r31 = −sβ ). Ensuite, on discute selon la valeur de β :
π π
• Si β ∈ ] − 2 , + 2 [ alors
α = arctan2(r32 , r33 ) et γ = arctan2(r21 , r11 ).
• Si β = + π2alors α − γ = arctan2(−r23 , r22 ). On dispose d’un degré de liberté dans le choix des angles,
la décomposition n’est donc pas unique.
π
• Si β = − 2 alors α + γ = arctan2(−r23 , r22 ). On dispose encore d’un degré de liberté, la décomposition
n’est pas unique.
Pour les deux cas particuliers β = ± π2 , on retrouve le phénomène de blocage de cadran, qui se traduit ici
par l’absence d’une décomposition unique pour certaines configurations.
Exercice.
On veut étudier en détail et à la main le phénomène de blocage de cadran. Dans cet exercice on fixe :
π
β =+ .
2
Soient α, γ des angles quelconques et soit R la matrice de rotation de la convention x- y-z :
R = Rz (γ) R y (β) R x (α)
1. Vérifier que :
 
0 sα−γ cα−γ
R =  0 cα−γ −sα−γ 
−1 0 0
ROTATIONS DE L’ESPACE 63

où cα−γ = cos(α − γ) et sα−γ = sin(α − γ).


€xŠ
2. Résoudre l’équation RX = X où X = y et en déduire que l’axe de la rotation est dirigé par le vecteur
z
(non unitaire) :  
1 − cα−γ

v =  sα−γ  .
cα−γ − 1
3. À l’aide de la trace de matrices, montrer que l’angle θ de la rotation R vérifie :
cos(α − γ) − 1
 ‹
|θ | = arccos .
2
4. Expliquer pourquoi la décomposition de R n’est pas unique dans le cas β = π2 .

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.

3.2. Rappels : nombres complexes


Les quaternions sont analogues aux nombres complexes, en un petit peu plus compliqués. Rappelons qu’un
nombre complexe est l’écriture :
z = a + bi
où a, b ∈ R et i vérifient :
i2 = −1.
Très rapidement :
• On identifie un nombre complexe z = a + bi à un point (a, b) du plan.
• a s’appelle la partie réelle et b la partie imaginaire.
• Le module de z est le réel positif défini par |z|2 = a2 + b2 .
• Le conjugué est z̄ = a − bi, de sorte que |z|2 = zz̄.
• La multiplication est commutative : z1 z2 = z2 z1 .
• On note eiθ = cos(θ ) + i sin(θ ).
• L’opération z 7→ zeiθ , correspond à transformer le point (a, b) par la rotation d’angle θ , centrée à l’origine.

3.3. Écriture algébrique des quaternions


Un quaternion est l’écriture :

q = a + bi + cj + dk

où a, b, c, d sont des réels et où i, j, k vérifient :

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 :

La multiplication des quaternions n’est pas commutative.

Voici quelques notions et propriétés élémentaires. On note toujours q = a + bi + cj + dk.


• a s’appelle la partie réelle et bi + cj + dk s’appelle la partie vectorielle (ou aussi partie imaginaire).
• La norme ∥q∥ est le réel positif défini par :
∥q∥2 = a2 + b2 + c 2 + d 2 .
• Le conjugué de q est q̄ = a − bi − cj − dk. De sorte que qq̄ = ∥q∥2 .
• Pour un quaternion non nul (c’est-à-dire (a, b, c, d) ̸= (0, 0, 0, 0)),
1 a − bi − cj − dk
q−1 = q̄ = 2
∥q∥ 2 a + b2 + c 2 + d 2
de sorte que qq−1 = q−1 q = 1.
ROTATIONS DE L’ESPACE 65

• 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

Notons P ′ l’image de P par la rotation R et p′ le quaternion vectoriel pur associé. Alors

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 .

Démonstration. La rotation R1 est la transformation p 7→ p′ = q1 pq1−1 . La rotation R2 est la transforma-


tion p′ 7→ p′′ = q2 p′ q2−1 . La rotation R1 suivie de la rotation R2 est donc p 7→ p′′ = q2 (q1 pq1−1 )q2−1 =
(q2 q1 )p(q2 q1 )−1 .
ROTATIONS DE L’ESPACE 66

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.

1. Notons P ′ = R1 (P). Son quaternion associé est (après calculs) :


5 1 1p 1 1p
 ‹  ‹
′ −1
p = q1 pq1 = i + − + 2 j+ − − 2 k.
6 6 4 6 4
2. Notons P ′′ = R2 (P ′ ) = R2 ◦ R1 (P), le quaternion associé (après calculs) est :
p
′′ ′ −1 1 2 1
p = q2 p q2 = i − j − k.
2 2 2
p
Ainsi les coordonnées de P ′′ sont ( 12 , − 2 1
2 , − 2 ).

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).

De même on prouve facilement les résultats suivants.


Proposition 3.
Soit R la rotation (d’angle θ ) associée à un quaternion unitaire q.
1. La rotation inverse (d’angle −θ et de même axe) est associée à q−1 (qui est aussi q̄ car q est unitaire),
c’est-à-dire à la transformation p 7→ q−1 pq.
2. La rotation R itérée n fois (donc une rotation d’angle nθ ) est associée à q n , c’est-à-dire à la transformation
p 7→ q n pq−n .

3.6. Retrouver l’axe et l’angle


Si on nous donne un quaternion unitaire q = a + bi + cj + dk, alors on retrouve l’axe #» v et l’angle θ selon les
formules suivantes :
 
b
#» 1 €p Š
v =p c θ = 2 arctan2 b2 + c 2 + d 2 , a .
b2 + c 2 + d 2
d

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

2. Le quaternion associé à la rotation R2 ◦ R1 est :


1 1 1 1
q = q2 q1 = − − i + j − k.
2 2 2 2
3. On applique les formules énoncées précédemment pour retrouver l’axe et l’angle :
 1  
−2 p −1
#» 2  1  3 
v =p 2 = 1
3 1 3
−2 −1
et p 
3 1 4π
θ = 2 arctan2 ,− = .
2 2 3

Ainsi R2 ◦ R1 est une rotation d’axe (−1, 1, −1) et d’angle 3 = − 2π
3 [2π], ce qui était loin d’être évident !
Chapitre

Perspective
6

Nous expliquons différentes façons de représenter l’espace 3D sur un plan 2D.

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

Voici quelques projections du même cube mais avec différents points C.

1.2. Cas simple


L’espace est muni du repère orthonormé (O x yz) classique. Le point C( f , 0, 0) est fixé sur l’axe (Ox) (la
valeur f s’appelle la focale). Le plan P de projection est le plan (O yz), c’est-à-dire d’équation (x = 0). Dans
ce plan on note (X , Y ) les coordonnées du plan (avec X = y et Y = z).
z
Y

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 ′ .

1.3. Cas général


Voici les formules, pour le cas d’un point C(x C , yC , zC ) de coordonnées quelconques, en projetant toujours
sur le plan (O yz),
Proposition 2.
Pour P de coordonnées (x, y, z) (avec x ̸= x C ) alors son image par la perspective linéaire est P ′ de coordonnées
(X , Y ) dans P avec :

= λ( 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

Voici quelques projections obtenues en faisant tourner un cube.

2.2. Cas simple

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

Si on considère la projection comme une application de R3 → R3 alors elle s’écrit :


   
x 0

P =  y  7−→ P =  y  .
z z
C’est une application linéaire, dont la matrice est :
 
0 0 0
M1 = 0 1 0 .
0 0 1
Si on considère cette projection de l’espace vers le plan P dont les coordonnées sont (X , Y ), alors les formules
sont tout simplement :
X=y et Y = z.
La matrice correspondante est :
 
0 1 0
M1′ = .
0 0 1
PERSPECTIVE 72

2.3. Cas général


On considère une projection orthogonale sur un plan quelconque (passant par l’origine). Ce plan est
déterminé par un vecteur normal #» n , qui est aussi la direction de projection. Nous allons caractériser cette
direction par un vecteur déterminé par ses coordonnées longitude/latitude. Ainsi une projection orthogonale
−−→
est déterminée par le vecteur #»
n = OM où le point M (1, ϕ, λ) est défini en coordonnées sphériques (par sa
latitude ϕ et sa longitude λ).

y
λ

On note (X , Y ) les coordonnées sur le plan de projection.


Proposition 3. €xŠ 
La projection orthogonale suivant l’axe de latitude ϕ et de longitude λ est donnée par l’application : y 7→ X
Y
z
définie par :
 
x
λ λ
   
X − sin cos 0
= M  y où M= .
Y sin ϕ cos λ sin ϕ sin λ cos ϕ
z
Autrement dit :
X = − sin(λ) · x + cos(λ) · y


Y = sin(ϕ) cos(λ) · x + sin(ϕ) sin(λ) · y + cos(ϕ) · z

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

2.4. Cas particuliers


Des valeurs classiques sont :
• λ = 30◦ et ϕ = 20◦ ,
π
• λ = 4 = 45◦ et différentes valeurs de ϕ.

Exemple (Perspective isométrique).


Les paramètres sont λ = π4 = 45◦ et ϕ tel que sin ϕ = p13 (de sorte que ϕ ≃ 35◦ ). Pour la perspective
isométrique les trois axes ont la même importance (mais
€ Š ce n’est pas une isométrie au sens géométrique
1
usuel). Le vecteur normal au plan de projection est 1 .
1
PERSPECTIVE 74

z
z

y
x
x y
Projection d’un cube Vecteur normal au plan de projection

La matrice de cette projection est :


‚ p p Œ
2 2
− 0
p2 p2 p
p2 p2 p2
2 3 2 3 3 p
Les distances sur chacun des axes sont diminuées d’un coefficient multiplicatif cos ϕ = p2 ≃ 0.82.
3

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.

Voici quelques projections parallèles d’un cube.


PERSPECTIVE 75

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.

3.2. Données d’une axonométrie


Une projection parallèle est définie par :
• la donnée de 3 angles α, β, γ (avec α + β + γ = 2π),
• et 3 coefficients k x , k y , kz .
#» #» #»
Les angles déterminent 3 vecteurs unitaires f1 , f2 , f3 du plan :

• f3 est par convention vertical dirigé vers le haut,
#» #»
• f1 forme un angle −α avec f3 ,
#» #»
• f2 forme un angle β avec f3 .
#» #» #»
Les vecteurs f1 , f2 , f3 sont multipliés par par le facteur d’échelle correspondant à son axe :
#» #»
• f1′ = k x f1 ,
#» #»
• f2′ = k y f2 ,
#» #»
• f3′ = kz f3 .


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

3.4. Cas particuliers


p
2π p2 .
Perspective axonométrique. Cette projection est caractérisée par α = β = 3 et k x = k y = kz = 3

p
2π 2π p2
α= 3 ,β = 3 , kx = k y = kz = 3

Perspective cavalière. Très utilisée en dessins techniques faits à la main. On impose β = π2 et k y = kz = 1.


Il reste deux paramètres α et k x à fixer. Des valeurs classiques sont α = 3π 1
4 et k x = 2 ou k x = 1.

La matrice de cette projection est :


−k x sin α 1 0
 

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

α= 4 , kx =1

3.5. Théorème de Pohlke


Le théorème de Pohlke (que nous admettrons) affirme que, quelles que soient nos données, il existe une
projection parallèle correspondante.
Théorème 1 (Pohlke).
#» #» #»
Tout triplet ( f1′ , f2′ , f3′ ) qui engendre le plan R2 est l’image, à homothétie près, d’une base orthonormée (e#»1 , e#»2 , e#»3 )
de l’espace R3 par une projection parallèle. Autrement dit, il existe un cube de l’espace (de longueur de côté k)
#» #» #»
dont les côtés de base sont (k e#»1 , k e#»2 , k e#»3 ) qui se projette parallèlement sur ( f1′ , f2′ , f3′ ).
#» #» #»
L’unique condition de ce théorème est que les trois vecteurs f1′ , f2′ , f3′ ne soient pas colinéaires.
PERSPECTIVE 78

4. Autres perspectives
Nous étendons notre étude à des projections plus exotiques, dont certaines permettent d’avoir une vision
large de la scène.

4.1. Coordonnées cylindriques


Expliquons comment les coordonnées cylindriques permettent d’avoir une vision à 360°. On imagine qu’on
dispose d’un écran souple qu’on enroule pour former un cylindre.
Il s’agit tout simplement de la transformation suivante (x, y, z) 7→ (−θ , z) :
P(x, y, z) 7−→ P(r, θ , z) 7−→ P ′ (X , Y ) = (−θ , z)
On part des coordonnées cartésiennes que l’on transforme en coordonnées cylindriques, puis on projette sur
le cylindre (on oublie la coordonnée r). L’angle θ (donc X ) varie de −π à π et z (donc Y ) appartient à R
(mais dans la pratique est borné).

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).

4.2. Coordonnées sphériques


Remarque. On peut faire la même chose avec les coordonnées sphériques :
P(x, y, z) 7−→ P(r, ϕ, λ) 7−→ P ′ (X , Y ) = (−λ, ϕ)
où ϕ ∈ [− π2 , π2 ] est la latitude et λ ∈] − π, π] est la longitude.
PERSPECTIVE 80

On pourrait imaginer beaucoup d’autres variantes, mais comme pour les projections cartographiques, aucune
n’est parfaitement fidèle.

4.3. Perspective curviligne cylindrique


La perspective curviligne cylindrique part du principe que dans une vision à 180° les objets sur la droite et
la gauche du champ de vision devraient paraître plus petits que les objets en face.
On considère un cylindre vertical, d’axe (Oz), de rayon R. La projection s’effectue sur le plan vertical P
d’équation (x = R) tangent au cylindre. La construction est la suivante :
• On part d’un point P de l’espace,
• on le projette sur le point P ′ du cylindre,
• puis on projette ce point orthogonalement sur le plan P en un point P ′′ .
PERSPECTIVE 81

y .
P

. .P
P′ ′′
R

plan (x = R)

Notons P(x, y, z) les coordonnées du point à projeter et r = x 2 + y 2 . La transformation est la suivante :


p
 ‹  ‹
′ R R ′′ R
P(x, y, z) 7−→ P x , y , z 7−→ P (X , Y ) = y , z
r r r
Cette transformation conserve la hauteur z des points.

4.4. Perspective curviligne sphérique


On étend la construction précédente sur le même principe avec une distorsion haut/bas, en plus de la
distorsion gauche/droite. On obtient une vue à 180° de gauche à droite, mais aussi de haut en bas. Le
résultat obtenu ressemble à une photographie prise avec un objectif de type fisheye.
Dans cette construction, on projette le point sur une (demi-)sphère de rayon R, puis sur un plan vertical
tangent.
Pour P(x, y, z) on note cette fois r = x 2 + y 2 + z 2 . La transformation est :
p
 ‹  ‹
′ R R R ′′ R R
P(x, y, z) 7−→ P x , y , z 7−→ P (X , Y ) = y , z
r r r r r
D E U X I È M E PA R T I E

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é.

1. Intersection avec une surface plane


Voici les notations utilisées pour ce chapitre :
• Point S : la source, c’est l’origine du rayon. Contrairement à ce que l’on peut penser cela ne correspondra
pas à la source lumineuse, mais à la position de l’observateur ou celle de la caméra.
Vecteur #»
v : direction du rayon. On pourra normaliser #»v pour simplifier certains calculs.

#» #»
• S + t v (t ∈ R) : paramétrisation du rayon (issu de S, dirigé par v ).
• Point P : intersection de l’objet étudié avec le rayon (ou P1 , P2 , . . . en cas d’intersections multiples).

1.1. Dans le plan : intersection avec un segment


À titre d’illustration et de motivation commençons par étudier le problème dans le plan.
• L’objet étudié est un segment [AB] où A et B sont deux points distincts du plan.

• On se donne un rayon défini par un point S et un vecteur v .
• Question 1. Le rayon coupe-t-il la droite (AB) ? le segment [AB] ?
• Question 2. Si oui, quel est ce point d’intersection ?

.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

Le point P est l’intersection du rayon et de la droite, ainsi t et α vérifient l’égalité :


S + t #»


v = A + αAB.
Autrement dit :
t #»


v = A − S + αAB.
Ce qui donne :


t #»


v = SA + αAB (1)

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

Appartenance au segment [AB]. Le point P appartient au segment [AB] si et seulement si α ⩾ 0 et α ⩽ 1.


(Si α < 0 le point P est « avant » A, si α > 1 le point P est « après » B.)

On peut apporter quelques précisions :


• L’objet est-il devant ou derrière la source ?
Le rayon coupe l’objet à un temps positif si et seulement si t ⩾ 0 . Sinon le rayon coupe l’objet « dans le
passé », c’est-à-dire que l’objet est situé derrière la source, ce que l’on ne considère généralement pas
comme valide.
• Le rayon coupe-t-il l’objet sur sa face visible ?
Désignons (arbitrairement) la face visible par le vecteur #» n sortant, de sorte que (AB, #»
−→
n ) soit une base
#» #»
directe du plan. Le rayon éclaire la face visible si et seulement si v · n < 0 .

face visible
.B
face non visible

v #»n

.A

1.2. Plan d’équation a x + b y + cz + d = 0


Revenons dans l’espace : lançons un rayon vers un plan et calculons le point d’intersection.

P

.
S
v .
P


n

Soit P un plan d’équation a x + b y + cz + d = 0. Le vecteur #»


€aŠ
n= b est un vecteur orthogonal au plan.
c
On note S = yS et #»
 xS  x 
v

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

Le point P est sur le rayon, donc il existe t ∈ R tel que :


P = S + t #»
v
et P est dans le plan (ABC) donc il existe α, β ∈ R tels que :

→ −→
P = A + αAB + β AC.
LANCER DE RAYONS I 87

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

2. Le point P appartient au triangle ABC si et seulement si :

α⩾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.

Démonstration. Des équations


−→
P = S + t #»


v et P = A + αAB + β AC,
on tire :
−→
S + t #»


v = A + αAB + β AC,
d’où :

→ −→
t #»


v = SA + αAB + β AC (2)
Le produit scalaire avec #»
n à gauche et à droite de l’égalité (2) donne :

→ −→
t #»
v · #»
n = SA · #»
n + αAB · #»
n + β AC · #»
−→
n
−→
Mais #»


n est orthogonal à AB et à AC, donc :


t #»
v · #»
n = SA · #»
n + 0 + 0,
ce qui donne la valeur voulue pour t.
−→
On repart de l’égalité (2) mais cette fois on effectue le produit vectoriel avec AC sur le terme de gauche et
celui de droite :
−→ − → −→ → −→ −→ −→
t #»

v ∧ AC = SA ∧ AC + αAB ∧ AC + β AC ∧ AC.
→ −→ −→ −→ #»
Par définition AB ∧ AC = #»

n et on a AC ∧ AC = 0 , d’où :
−→ − → −→
t #»
v ∧ AC = SA ∧ AC + α #»
n.
On effectue le produit scalaire par #»
v de part et d’autre :
−→ −
→ −→
t( v ∧ AC) · #»
#» v = (SA ∧ AC) · #»
v + α #»
n · #»
v.
#» −→ #» #» −→ #»
Mais v ∧ AC est orthogonal à v donc ( v ∧ AC) · v = 0, ce qui donne :

→ −→
0 = (SA ∧ AC) · #»
v + α #»
n · #»
v,
d’où la valeur de α.
Pour trouver β, on repart de (2) en effectue le produit vectoriel avec AB, puis le produit scalaire #»


v pour
obtenir :

→ −
0 = (SA ∧ AB) · #»
v − β #»
n · #»

v.

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

Dans toute la suite on considère des polygones convexes.


B. Calculs dans le plan.
On considère un polygone convexe C dans un repère orthonormé dont les sommets ordonnés sont Ai (x i , yi ),
i = 1, . . . , n dans un plan P . On pose An+1 = A1 . La numérotation peut être dans le sens trigonométrique
positif ou négatif.
Proposition 4.
Le point P(x, y) est à l’intérieur du polygone C si et seulement si les nombres :
# » # »
det( PAi , PAi+1 ) = (x − x i )( y − yi+1 ) − (x − x i+1 )( y − yi ) i = 1, . . . , n
sont tous de même signe (tous positifs ou tous négatifs).


.
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

On a le même résultat que précédemment dans ce nouveau repère.


Proposition 5.
Le point P(α, β) est à l’intérieur du polygone C si et seulement si les nombres :
(α − αi )(β − βi+1 ) − (α − αi+1 )(β − βi ) i = 1, . . . , n
sont tous de même signe.
Le résultat est une conséquence de la proposition 4 après un changement de coordonnées
α
   
x
=A
β y
#» #»
pour une certaine matrice A correspondant au changement de la base orthonormée ( i , j ) vers la base
( #»
u , #»
v ).
C. Somme des angles.
Voici une méthode qui ne nécessite pas de ramener les calculs à un plan. Soit C un polygone de som-
mets A1 , . . . , An . Soit P un point du plan P contenant le polygone. Notons θi l’angle (orienté) formé par
−→ −−−→
( PAi , PAi+1 ).
Proposition 6.
Pn Pn
Si P est à l’intérieur du polygone i=1 θi = 2π (ou −2π) . Si P est à l’extérieur du polygone i=1 θi =0 .
LANCER DE RAYONS I 91

.
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

Par contre il faut expliquer comment attribuer (arbitrairement) un signe à θ .


On fixe un vecteur #»n orthogonal au plan P du polygone (par exemple #»
−−→ −−→
n = A1 A2 ∧ A1 An ). Pour chaque i on
calcule le produit vectoriel #»
w i = PAi ∧ PAi+1 , puis #»
w i · #»
−→ −−−→
n . Le signe de ce produit scalaire est le signe de θi .
Un avantage de cette formule est sa stabilité. En effet, même si P n’est pas parfaitement dans le plan
P du polygone (par exemple juste au-dessus du plan ou juste en dessous) on peut encore décider si
P est plutôt à l’intérieur ou plutôt à l’extérieur. Pour un point P plutôt à l’intérieur du polygone alors
Pn Pn
i=1 θi ≃ 2π (en fait la P
somme sera proche mais strictement inférieure à 2π) ou i=1 θi ≃ −2π, pour un
n
point plutôt à l’extérieur i=1 θi ≃ 0. Les alternatives possibles sont suffisamment différentes pour autoriser
des incertitudes numériques sur les coordonnées et les calculs.

2. Intersection avec une sphère

2.1. Dans le plan : intersection avec un cercle


Considérons la situation plus simple du lancer d’un rayon dans le plan. Ce rayon intersecte-t-il un cercle
donné et, si oui, en quels points ? Il y a 0 ou 2 solutions (et une seule dans le cas tangent).
LANCER DE RAYONS I 92

. . 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

2.2. Sphère : formule algébrique


Considérons la sphère S de centre O = (x O , yO , zO ) et de rayon R. Le rayon a pour origine S = (x S , yS , zS ) et
est dirigé par le vecteur unitaire #»
v = (x v , y v , z v ) . Le rayon est paramétré par P = S + t #»
v pour t parcourant
R.
Proposition 7.
Soient
−→
B = #»
v · OS = x v (x S − x O ) + y v ( yS − yO ) + z v (zS − zO ),
C = OS 2 − R2 = (x S − x O )2 + ( yS − yO )2 + (zS − zO )2 − R2 ,
∆ = B2 − C 2.
• Si ∆ < 0, le rayon n’intersecte pas la sphère.
• Si ∆ = 0, le rayon est tangent à la sphère au point P0 de paramètre t 0 = −B.
p p
• Si ∆ > 0, le rayon coupe la sphère en deux points P1 et P2 de paramètres t 1 = −B − ∆ et t 2 = −B + ∆.
Discussion complémentaire : un point P sur la sphère est « devant » le rayon si son paramètre t est positif.
Si deux points sont devant le rayon, c’est celui qui est a le plus petit paramètre qui est visible.

. #»
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

Démonstration. L’équation de la sphère centrée en O et de rayon R est :


(x − x O )2 + ( y − yO )2 + (z − zO )2 = R2 .
Le paramétrage du point P = (x, y, z) du rayon donne :
     
x xS xv
 y  =  yS  + t  y v  .
z zS zv
On reporte ces coordonnées dans l’équation de la sphère :
(x S + t x v − x O )2 + ( yS + t y v − yO )2 + (zS + tz v − zO )2 = R2 .
On développe cette expression pour obtenir une équation polynomiale de degré 2 en t :
(x v2 + y v2 + z v2 )t 2

+ 2t x v (x S − x O ) + y v ( yS − yO ) + z v (zS − zO )
+ (x S − x O )2 + ( yS − yO )2 + (zS − zO )2 − R2 = 0
Comme ∥ #»
v ∥ est un vecteur supposé unitaire, alors x v2 + y v2 +z v2 = 1, l’équation obtenue est donc simplement :
t 2 + 2B t + C = 0.
Cette équation de degré 2 en t a pour discriminant réduit ∆ = B 2 − C 2 . Si ∆ < 0 cette équation n’a pas de
p
solution ; si ∆ = 0 il y a une solution (double) t 0 = −B ; si ∆ > 0 il y a deux solutions t 1 = −B − ∆ et
p
t 2 = −B + ∆.

2.3. Sphère : formule géométrique


De nouveau, on suppose #»
v de norme 1.
Proposition 8.
1. Soit H le projeté orthogonal de O sur le rayon paramétré par S + t #»
v . Le paramètre du point H sur le rayon
est :
−→
t H = SO · #»
v

2. Notons d = OH. Alors :


€−→
d 2 = SO2 − SO · #»
Š2
v

3. Le rayon intersecte la sphère si et seulement si R2 − d 2 ⩾ 0.


4. Dans ce cas les points d’intersections ont pour paramètres :
p p
t1 = t H − R2 − d 2 et t2 = t H + R2 − d 2
LANCER DE RAYONS I 95

.
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.

Exercice. Reprendre les calculs pour un vecteur #»


v non unitaire. Vérifier que les trois premiers points utilisent
seulement ∥ v ∥ (et donc il n’y a pas besoin d’extraire une racine carrée pour obtenir ∥ #»
#» 2
v ∥).
LANCER DE RAYONS I 96

3. Intersection avec une boite


Pour décider si un objet complexe va être intersecté par un rayon on peut commencer par inclure l’objet
dans une boite (bounding box). Si le rayon ne coupe pas la boite (nous allons voir que c’est un calcul facile)
alors nous sommes sûrs que le rayon ne coupe pas l’objet et on s’épargne alors des calculs compliqués. Si le
rayon coupe la boite, alors on peut lancer le calcul pour savoir si le rayon coupe notre objet et, si oui, en
quels points.

3.1. Explications dans le plan


Dans le plan une boite est un rectangle dont les côtés sont parallèles aux axes. Nous définissons une boite
par son coin inférieur gauche A(x A, yA) et son coin supérieur droit B(x B , yB ).

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

De même pour le point B, on pose


x B − xS y B − yS
t xB = t yB = t out = min(t x B , t yB ).
xv yv
Si le rayon coupe la boite, alors le point de sortie est Pout , de paramètre t out .
Que se passe-t-il si le rayon n’intersecte pas la boite ? Dans ce cas les valeurs t in et t out sont bien définies
mais on a t in > t out (le point d’entrée serait après le point de sortie !).

.t
in

. .B .B
tout

. A
. . .t
in
A t
#» out
v #»
.
S
.
S
v

Résumons nos observations :


Proposition 9.
Considérons le cas x v > 0 et y v > 0. Soient :
x A − x S yA − yS x B − x S y B − yS
 ‹  ‹
t in = max , et t out = min , .
xv yv xv yv
Le rayon intersecte la boite si et seulement si t in ⩽ t out . Dans ce cas le point d’entrée Pin est de paramètre t in et
celui de sortie Pout est de paramètre t out .
Noter que la source S peut être à l’intérieur de la boite, dans ce cas le rayon intersecte toujours la boite
mais le point Pin est avant la source et donc le premier point qui atteint la boite après la source est Pout .

3.2. Algorithme dans l’espace


Une boite de l’espace est un parallélépipède rectangle dont les faces sont parallèles aux axes. Elle est définie
par deux sommets opposés A(x A, yA, zA) et B(x B , yB , zB ). Le rayon est issu de S(x S , yS , zS ) et dirigé par un
vecteur non nul quelconque #» v (x v , y v , z 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

1.1. Vue d’ensemble


La lumière possède à la fois les propriétés d’une onde et des corpuscules (photons). La lumière et l’éclairage
sont des phénomènes complexes, difficiles à modéliser. Ici nous allons faire des hypothèses simplificatrices :
• L’éclairage est direct, avec une seule source lumineuse. Si on avait plusieurs sources, il suffirait de faire
les calculs pour chaque source. Par contre on considère que les objets sont uniquement éclairés par les
sources lumineuses et non par réflexion de la lumière sur d’autres objets (comme le serait l’éclairage via
un miroir par exemple).
• Il n’y a pas de transparence. Un objet avec transparence réfléchit une partie de la lumière reçue et laisse
passer une autre partie. Nos objets seront opaques.

éclai
rage
2 Objet
1 Source lumineuse
Élément de surface
n
io
éx
fl

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)

• Multiplication. La multiplication s’effectue aussi terme à terme :


Cl1 ⊗cl Cl2 = (r1 r2 , g1 g2 , b1 b2 )

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

2.1. Lumière directionnelle


Les rayons lumineux arrivent tous avec la même direction. C’est le cas par exemple de la lumière du soleil,
ou d’une source lumineuse très éloignée.

S
.




n .
.
P

Cette lumière est caractérisée par :



• une direction : si u est le vecteur qui indique la direction des rayons, alors
#» #»
u
ℓ = − #» .
∥u∥
LUMIÈRE 102

• une intensité : iℓ .

L’intensité iℓ et cette direction ℓ sont constantes, quelle que soit la position du point P.

2.2. Lumière ponctuelle


La lumière « rayonne » dans toutes les directions depuis la source, comme par exemple une ampoule.

n


.
.
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 .

Variante avec plus de paramètres.


1
iℓ =
αr 2 +βr +γ

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(θ )

où l’angle ω est l’angle de P par rapport à l’axe du cône :



cos(ω) = − ℓ · #»
u

#» θ

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

blanc blanc gris


noir noir

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

Évidemment on peut considérer une version plus générale avec :


1
iℓ = (cos(ω))eatt .
αr + β r + γ
2

3. Illumination

3.1. Modèle de Phong


La couleur dont est perçu un objet dépend de son éclairage (intensité, direction, couleur. . .) mais aussi de
l’objet lui-même (couleur, matière, brillant/mat. . .).
Nous modélisons la couleur perçue via le modèle de Phong. Un calcul est à effectuer pour chaque élément
de surface. La couleur s’obtient comme la superposition de quatre types de luminosité dont on additionne
les couleurs :
• luminosité irradiante Clirr (facultative),
• luminosité ambiante Clamb ,
• luminosité diffuse Cldiff ,
• luminosité spéculaire Clspec .

Lumière ambiante Lumière diffuse Lumière spéculaire

Lumière ambiante et diffuse Lumière diffuse, ambiante et spéculaire

La couleur perçue est l’addition de ces couleurs :

Clperçue = Clirr ⊕cl Clamb ⊕cl Cldiff ⊕cl Clspec

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

3.2. Luminosité irradiante


La luminosité irradiante est une lumière émise par l’objet lui-même, même en l’absence d’éclairage, comme
une sorte de rayonnement de l’objet dans toutes les directions.

.P2

.
P1

La couleur associée est notée :

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.

3.3. 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. C’est par exemple le cas d’une scène en extérieur par ciel nuageux,
ou bien dans une pièce avec plusieurs fenêtres ayant un voilage.

.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 :

Clamb = isource Clsource ⊗cl 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).

3.4. Luminosité diffuse


La luminosité diffuse est une caractéristique associée aux matériaux mats (ex. : bois, cuir. . .) dont l’aspect
microscopique est rugueux et conduit à une réflexion de la lumière dans toutes les directions.
Voici un zoom à un niveau microscopique d’une surface mate :

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

La formule de la couleur diffuse est résumée en :



Cldiff = isource max( ℓ · #»
n , 0) Clsource ⊗cl Clobjet

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.

3.5. Luminosité spéculaire


La luminosité diffuse vue précédemment renvoie uniformément la lumière dans toutes les directions. Mais
en réalité, la lumière se réfléchit davantage par réflexion sur la surface : c’est la luminosité spéculaire.
Elle s’observe sur les objets brillants (plastique, métal poli. . .), le cas extrême étant celui d’un miroir sur
lequel un rayon lumineux est renvoyé dans une seule direction. Cependant, si la surface est moins lisse, les
réflexions s’étalent autour d’une direction privilégiée (la distribution étant centrée autour d’un axe principal
de réflexion).

réflexion sur un miroir luminosité spéculaire

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−ℓ

Voici la formule de la couleur de la luminosité spéculaire.



Si ℓ · #»
n ⩾ 0 et #»
r · #»
v ⩾ 0 alors :

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 − ℓ.

Calcul de l’angle ω. Notons ω l’angle entre #»


v (dirigé vers l’observateur) et #»
r (axe principal de réflexion).


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 ω

Validité des formules.



D’une part, on souhaite éclairer la face visible, donc il faut ℓ · #»n ⩾ 0. D’autre part, l’observateur doit être
du « bon » côté de la réflexion, c’est-à-dire #»
r · #»
v ⩾ 0. Dans les autres cas, la lumière atteint une face cachée
ou bien n’est pas du tout renvoyée vers l’observateur.

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

Comment tracer, pixel par pixel, les figures géométriques de base ?

1. Pixels

1.1. L’unité d’affichage


Le pixel est l’unité élémentaire d’affichage graphique numérique. Son abréviation est « px ». Le plus souvent
le pixel est assimilé à un carré (ce sera le cas dans ce cours), mais peut aussi parfois être un rectangle.

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.

Les sous-pixels d’un écran de téléphone portable (photo Wikimedia).

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 rapport d’image est le quotient de la largeur par la hauteur :


largeur
rapport d’image = .
hauteur
Par exemple, pour un écran de taille 1024 × 768, cela signifie que chaque ligne contient 1 024 pixels et que
chaque colonne contient 728 pixels. Le rapport d’image est
1024 4
r= = ≃ 1.33.
768 3
PIXELS 115

Nom du format largeur hauteur rapport (fraction) ratio (approché)


VGA 640 480 4/3 1.33
HD720 1280 720 16/9 1.77
HD1080 1920 1080 16/9 1.77
WUXGA 1920 1200 16/10 1.60
4K 3840 2160 16/9 1.77
8K 7680 4320 16/9 1.77
Image format Cinémascope 1024 430 2.38

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)

2. Tracé de droites et de cercles

2.1. Tracé élémentaire d’un segment


Le but est de tracer un segment composé de pixels entre deux points P1 (x 1 , y1 ) et P2 (x 2 , y2 ). Nous supposons
que ces points ont des coordonnées entières (x 1 , y1 , x 2 , y2 ∈ Z) et qu’un pixel est un carré de côté 1 centré
en un couple d’entier (i, j).

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

Algorithme (Algorithme du tracé élémentaire).


Entrée : des entiers x 1 , y1 , x 2 , y2 vérifiant l’hypothèse.
Sortie : le tracé des pixels reliant (x 1 , y1 ) à (x 2 , y2 ).
y −y
• Calculer α = x 22 −x 11 .
• Poser i = x 1 .
• Poser y = y1 .
• Tant que i ⩽ x 2 :
— j = arrondi( y)
— afficher le pixel (i, j)
— i = i+1
— y = y +α

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

Voici les valeurs lorsqu’on applique l’algorithme :


i y j
0 0 0
1 0.375 0
2 0.75 1
3 1.125 1
4 1.5 2
5 1.875 2
6 2.25 2
7 2.625 3
8 3.0 3
Ce qui donne :

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.

2.2. Algorithme de Bresenham


Objectif : trouver un algorithme plus rapide que l’algorithme élémentaire en ne faisant que des calculs sur
des entiers. Le résultat est équivalent à l’algorithme précédent mais beaucoup plus rapide.
Voici quelques tracés.

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

Algorithme (Algorithme de Bresenham).


Entrée : des entiers x 1 , y1 , x 2 , y2 vérifiant l’hypothèse.
Sortie : le tracé des pixels reliant (x 1 , y1 ) à (x 2 , y2 ).
• Calculer p = 2∆ y = 2( y2 − y1 ).
• Calculer m = 2∆ y − 2∆x = 2( y2 − y1 ) − 2(x 2 − x 1 ).
• Poser d = 2∆ y − ∆x = 2( y2 − y1 ) − (x 2 − x 1 ).
• Poser i = x 1 et j = y1 .
• Tant que i ⩽ x 2 :
— afficher le pixel (i, j)
— si d < 0 :
— d =d+p
— sinon :
— j = j+1
— d =d+m
— i = i+1

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

Cas d < 0. Cas d ⩾ 0.

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

Preuve. Justifions que l’algorithme est correct.


• Équation de la droite à coefficients entiers. Nous avons vu qu’une équation de la droite (P1 P2 ) est
∆y
y = ∆x (x − x 1 ) + y1 avec ∆x = x 2 − x 1 et ∆ y = y2 − y1 . En multipliant cette équation par l’entier ∆x
on obtient l’équation :
(∆ y)x − (∆x) y − (∆ y)x 1 + (∆x) y1 = 0
c’est-à-dire une équation a x + b y + c = 0 avec a, b, c qui sont tous les trois des entiers.
Ainsi on définit la fonction :
E(x, y) = a x + b y + c
où a = ∆ y, b = −∆x, c = −(∆ y)x 1 + (∆x) y1 . Cette fonction détermine l’écart du point (x, y) par
rapport à la droite (P1 P2 ) :
— si E(x, y) = 0, le point (x, y) appartient à la droite,
— si E(x, y) < 0, le point (x, y) est situé au-dessus de la droite,
— si E(x, y) > 0, le point (x, y) est situé en-dessous de la droite.
• Monter ou pas ? Centrons en P(x k , yk ) un pixel déjà correctement colorié. Quels choix avons-nous pour
colorier le pixel suivant ? Dans tous les cas le pixel suivant sera sur la colonne d’abscisse x k + 1. Mais
son ordonnée sera soit yk + 1 (point A), soit yk (point B).

.
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 )

Cas Dk < 0. Cas Dk ⩾ 0.


Nous allons utiliser notre fonction d’écart E. Noter que l’on a toujours E(A) ⩽ 0 et E(B) > 0. On choisit
entre A et B celui qui est le plus proche de la droite réelle, c’est-à-dire celui qui a le plus petit écart |E(A)|
ou |E(B)| (en valeur absolue). Pour savoir lequel choisir on définit le défaut par
D(P) = E(A) + E(B).
On retient :
Si D(P) ⩽ 0 alors on choisit B, si D(P) > 0 alors on choisit A.
En effet, si D(P) ⩽ 0 alors E(A) + E(B) ⩽ 0 donc E(B) ⩽ −E(A) mais comme E(A) ⩽ 0 et E(B) > 0 alors
on a bien |E(B)| ⩽ |E(A)|.
PIXELS 120

• Calcul du défaut. Calculons Dk le défaut au point P(x k , yk ) :


Dk = D(x k , yk ) = E(A) + E(B) = E(x k + 1, yk + 1) + E(x k + 1, yk )
= a(x k + 1) + b( yk + 1) + c + a(x k + 1) + b yk + c
= 2a x k + 2b yk + 2a + b + 2c
En particulier D0 le défaut au point initial (x 1 , y1 ) est :
D0 = 2a x 1 + 2b y1 + 2a + b + 2c
= 2(a x 1 + b y1 + c) + 2a + b (⋆)
= 2a + b
= 2∆ y − ∆x
À la ligne (⋆) on a utilisé le fait que le point initial (x 1 , y1 ) est exactement sur la droite, donc a x 1 +b y1 +c =
0.
• Formule de récurrence du défaut.
Nous allons maintenant trouver la relation qui lie le défaut d’un pixel Dk au défaut du pixel suivant
Dk+1 . On part toujours du point P(x k , yk ), on a déjà calculé Dk . Le calcul de Dk+1 dépend du choix A ou
B pour le pixel d’abscisse x k+1 .

.
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

Ainsi en posant m = 2a + 2b = 2∆ y − 2∆x, on obtient la formule de récurrence :


Dk+1 = Dk + m.
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 (B ′ ).

.
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.

2.3. Anticrénelage (antialiasing)


Le tracé d’un segment est nécessairement une approximation d’un tracé de droite, qui présente des défauts de
visualisation appelée « crénelage ». On remédie à cette imperfection à l’aide d’un anticrénelage (antialiasing)
qui colorie aussi le pixel laissé de côté (le pixel A ou B écarté dans les algorithmes précédents).

P2 P2

P1 P1

Avec anticrénelage Sans anticrénelage


PIXELS 122

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.

Algorithme (Algorithme d’anticrénelage).


Entrée : des entiers x 1 , y1 , x 2 , y2 vérifiant l’hypothèse.
Sortie : le tracé des pixels reliant (x 1 , y1 ) à (x 2 , y2 ).
y −y
• Calculer α = x 22 −x 11 .
• Poser i = x 1 .
• Poser y = y1 .
• Tant que i ⩽ x 2 :
— j = ⌊ y⌋
— ℓ = y − ⌊ y⌋
— afficher le pixel (i, j) avec l’intensité de couleur 1 − ℓ
— afficher le pixel (i, j + 1) avec l’intensité de couleur ℓ
— i = i+1
— y = y +α

2.4. Tracé d’un cercle


On souhaite tracer un cercle de rayon r centré en (x 0 , y0 ). Ce cercle a pour équation :
(x − x 0 )2 + ( y − y0 )2 = r 2 .
Pour cela on va se contenter de tracer l’arc de cercle compris entre 90° et 45°. Le reste s’obtiendra par
symétrie.

Voici quelques exemples.


PIXELS 124

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).

Algorithme (Algorithme de tracé de cercle).


Entrée : des entiers x 0 , y0 pour le centre et un entier r pour le rayon.
Sortie : le tracé d’un arc du cercle centré en (x 0 , y0 ) de rayon r.
• Poser i = 0.
• Poser j = r.
• Poser d = 3 − 2r.
• Tant que i ⩽ j :
— afficher le pixel (x 0 + i, y0 + j)
— si d < 0 :
— d = d + 4i + 6
— sinon :
— d = d + 4i − 4 j + 10
— j = j−1
— i = i+1

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)

Cas Dk < 0. Cas Dk ⩾ 0.


• Calcul du défaut. Calculons Dk le défaut au point P(x k , yk ) :
Dk = D(x k , yk ) = E(A) + E(B) = E(x k + 1, yk ) + E(x k + 1, yk − 1)
= (x k + 1)2 + yk2 − r 2 + (x k + 1)2 + ( yk − 1)2 − r 2
= 2x k2 + 2 yk2 + 4x k − 2 yk + 3 − 2r 2
En particulier D0 le défaut au point initial (0, r) vaut :
D0 = 3 − 2r.
• Formule de récurrence du défaut.
On part du point P(x k , yk ), connaissant Dk on calcule Dk+1 en fonction du choix A ou B pour le pixel
d’abscisse x k+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.

Dk+1 = E(A′ ) + E(B ′ ) = E(x k + 2, yk − 1) + E(x k + 2, yk − 2)


= (x k + 2)2 + ( yk − 1)2 − r 2 + (x k + 2)2 + ( yk − 2)2 − r 2
= Dk + 4x k − 4 yk + 10
Conclusion : on sait calculer Dk+1 qui permet de choisir entre A′ et B ′ .

3. Colorier

3.1. Colorier par diffusion


Objectif. On considère une image formée par exemple de pixels noirs et blancs. On souhaite colorier en gris
une zone de l’image. Pour cela, on part d’un pixel initial (la graine, seed) et il faut colorier en gris toute la
zone de pixels blancs contenant la graine et bordée par des pixels noirs.

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.

Algorithme (Algorithme de remplissage par diffusion (flood fill)).


Entrée : un tableau de pixels noirs ou blancs, un pixel initial (x 0 , y0 ) (la graine)
Sortie : un tableau de pixels noirs, blancs ou gris
• file = [(x 0 , y0 )]
• Tant que la file n’est pas vide :
— prendre (x, y) un élément de file (et le retirer de la file)
— si (x, y) est un pixel blanc :
— le colorier en gris,
— ajouter à la file les quatre voisins (x − 1, y), (x, y + 1), (x + 1, y), (x, y − 1).

Quelques étapes du processus :

3.2. Colorier par balayage


Le coloriage par balayage en un peu plus performant au niveau de la mémoire car il colorie une portion de
ligne avant d’ajouter les pixels au-dessus ou en-dessous dans la file d’attente.

Algorithme (Algorithme de balayage (scan fill)).


Entrée : un tableau de pixels noirs ou blancs, un pixel initial (x 0 , y0 ) (la graine)
Sortie : un tableau de pixels noirs, blancs ou gris
• file = [(x 0 , y0 )]
• Tant que la file n’est pas vide :
— prendre (x, y) un élément de file (et le retirer de la file)
— poser x min = x − 1
— tant que (x min , y) est un pixel blanc :
— le colorier en gris,
— faire x min = x min − 1.
— poser x max = x
— tant que (x max , y) est un pixel blanc :
— le colorier en gris,
— faire x max = x max + 1.
PIXELS 128

— Pour chaque x ′ entre x min + 1 et x max − 1 :


— si (x ′ , y + 1) est un pixel blanc, l’ajouter à la file,
— si (x ′ , y − 1) est un pixel blanc, l’ajouter à la file.

Ci-dessous la graine et les premières lignes.

Quelques étapes plus avancées :

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.

4.1. Perspective atmosphérique


Voyons comment la technique des calques permet de simuler un paysage.
La perspective atmosphérique est une façon de représenter l’éloignement des différents plans ou calques
par des teintes plus claires, des contrastes moins élevés et des couleurs plus grises (la saturation diminue).
Cela reflète des phénomènes physiques réels, certaines particules de l’atmosphère (molécules d’air, goutte-
lettes d’eau, fumées. . .) diffractent la lumière (particulièrement les longueurs d’ondes plus courtes comme
le bleu).

Il existe un modèle de couleurs HSB (Hue/Saturation/Value : Teinte/Saturation/Luminosité) pour lequel il


suffit donc de changer le paramètre de saturation.
Ci-dessous les couleurs obtenues pour (h, s, b) avec h = 0.66, b = 0.8 et la saturation s variant de 0 à 1.
PIXELS 129

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.

SimCity 2000 (images : Wikipedia)

4.3. Principe de l’animation 2D


Vous le savez, on simule le mouvement à l’écran par un succession rapide d’images. Ainsi les pixels ne
se déplacent pas, mais seule leur couleur change. Le cerveau humain, entraîné par les objets réels en
mouvement, reconstitue un déplacement à partir d’images fixes.

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.

Écran Arrière-plan Personnage

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)).

(a) Copie d’une image

Image & position

blit

Écran avant Écran après


PIXELS 131

(b) Copie d’une sous-image

Sous-image

blit

Écran avant Écran après

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. Motivation : texture en une dimension

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

Voici trois images de texture :

Voici l’application de ces différentes textures :

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 ?

1.2. Texture (dimension 1)


L’idée pour appliquer une texture est simple : on part d’une image et on la colle sur un objet. Voyons ce que
pourrait être une définition mathématique. Nous commençons à chaque fois les explications en une seule
dimension. Même si une texture en dimension 1 a peu d’utilité, les concepts sont les mêmes que pour la
dimension 2 mais les équations sont plus simples.
Une texture (en dimension 1) est une fonction :
C : [0, 1] −→ E
u 7−→ C (u)
TEXTURE 134

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.

1.3. Texture (dimension 2)


Une texture (en dimension 2) est une fonction :
C : [0, 1]2 −→ E
(u, v) 7−→ C (u, v)
C’est une fonction qui à chaque point (u, v) d’un carré de référence associe une valeur. Autrement dit chaque
pixel du carré est colorié. Pour un objet O (de l’espace) et une de ses faces F , la fonction de plaquage est
une application bijective Φ :
Φ : [0, 1]2 −→ F
(u, v) 7−→ Φ(u, v)
Sa réciproque étant :
Ψ : F −→ [0, 1]2
P 7−→ Ψ(P)

Appliquer la texture, c’est pour chaque P ∈ F lui associer la couleur C Ψ(P) .
TEXTURE 135

(x, y, z)

v
Φ

Ψ
(u, v)
0 1 u

1.4. Texture (dimension 1) : suite


Revenons à nos textures en dimension 1.
Interpolation linéaire de [0, 1] dans [a, b]. Tout d’abord, le choix de l’intervalle [0, 1] comme ensemble de
départ des fonctions C et Φ est un peu arbitraire. On passe facilement de l’intervalle [0, 1] ⊂ R à n’importe
quel intervalle [a, b] ⊂ R (avec a ̸= b), pour cela il suffit de considérer la bijection :
φ : [0, 1] −→ [a, b]
u 7−→ (1 − u)a + ub
C’est l’exemple basique d’interpolation linéaire (lerp) : 0 s’envoie sur a, 1 sur b, 12 sur a+b2 ...
Interpolation non linéaire. Si a = 0 et b = 1 alors la fonction φ précédente est tout simplement l’identité
φ(x) = x. Mais il existe beaucoup d’autres fonctions f : [0, 1] → [0, 1] qui sont bijectives, par exemple toute
fonction f continue, strictement croissante avec f (0) = 0 et f (1) = 1. Une analogie c’est parcourir 10 km
en 1 h, on peut le faire à vitesse constante, ou bien rapide puis lent, ou l’inverse. . . De telles interpolations
non linéaires peuvent être utiles.
v v v

1 1 1

0 1 u 0 1 u 0 1 u

Une interpolation Une autre interpo-


Interpolation linéaire (lerp)
non linéaire lation non linéaire

Dans la suite on se limitera aux interpolations linéaires.


Interpolation linéaire de [0, 1] dans [A, B].
Pour A, B deux points du plan (ou de l’espace), la fonction de plaquage Φ : [0, 1] → [A, B] naturelle est celle
de l’interpolation linéaire :
Φ(u) = (1 − u)A + uB.
TEXTURE 136

. 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.

1.5. Équations directes et inverses


Interprétons les calculs précédents en termes de matrices. Les coordonnées (x, y) de P = Φ(u) se calculent
par :
   
x u
=T
y 1
avec  
x B − xA xA
T= .
yB − yA yA
La preuve est juste une variante des écritures précédentes :
x = u(x B − x A) + x A

.
y = u( yB − yA) + yA
Ces formules définissent Φ : [0, 1] → [A, B].
Réciproquement on pourrait calculer u à l’aide de
   
u −1 x
=T
1 y
Mais un calcul direct donne ici :
x − xA y − yA
u= = .
x B − xA yB − yA
Cette formule définit Ψ : [A, B] → [0, 1].

1.6. Modifications selon la normale


Les textures sont utiles bien au-delà de l’ajout d’une couleur. Les textures permettent : des effets de relief,
de modifier la granulosité, modifier la matière, modifier l’effet de l’éclairage, d’ajouter de la transparence et
de modifier localement la forme de l’objet.
Nous allons nous intéresser à la modification locale de la forme de l’objet qui peut être réelle ou simulée.
Cela permet de donner du relief, comme par exemple la peau d’une orange. Nous allons voir trois méthodes
de la plus simple à celle qui demande le plus de calculs.
Bump map. Il s’agit de modifier la hauteur apparente de la surface en simulant un léger déplacement selon
la direction normale. Mathématiquement, en dimension 1, cette texture est une fonction C : [0, 1] → R qui
à un paramètre u associe une hauteur C (u) de déplacement.
TEXTURE 137

Φ
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

vecteur normal initial


n# »P n# »
Q
vecteur normal simulé

.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.

Bump/Normal Displacement (facteur 1) Displacement (facteur 2)

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.

Displacement (facteur 1) Displacement (facteur 2)


Ci-dessous un résumé des trois modifications : à gauche la bump map, la surface réelle de l’objet n’est pas
modifiée mais le vecteur normal peut être changé avec un degré de liberté ; au centre la normal map, la
surface réelle de l’objet n’est pas non plus modifiée mais le vecteur normal peut être changé avec trois
degrés de liberté ; à droite la displacement map la surface réelle de l’objet est modifiée.
TEXTURE 139

n# »P n# »
Q n# »P

n′P .Q


n′P

. P
. P
.
n# »P
P

Bump map Normal map Displacement map

Plat Bump/Normal Displacement

2. Texture en deux dimensions


En partant d’une texture, comment l’appliquer sur l’objet réel ? Nous répondons à la question en fonction de
la nature géométrique de la face des objets : triangle, rectangle, quadrilatère, cylindre ou sphère.

2.1. Rectangle sur rectangle/parallélogramme


Dans le plan, envoyer le carré unité sur un rectangle vertical est très simple. Par exemple Φ : (u, v) 7→ (au, bv),
envoie le carré [0, 1] × [0, 1] sur le rectangle [0, a] × [0, b]. La matrice de cette application est :
 
a 0
M= .
0 b
Si on composait par une rotation puis une translation on pourrait obtenir n’importe quel rectangle du plan.

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

c’est-à-dire Φ(u, v) = (x, y) où :


= au + bv

x
.
y = cu + d v
#» #»
Le vecteur i = 10 de la base canonique s’envoie sur le vecteur #»
 
p = ( ac ) et le vecteur j = 01 s’envoie sur
le vecteur #»
q = db . Ainsi le carré unité s’envoie sur le parallélogramme engendré par ( #» p , #»

q ). N’importe
quel parallélogramme du plan se construit ainsi comme l’image du carré unité par une transformation
vectorielle (suivie d’une translation).

v
1 Φ

q

(0, 0) 1 u


p

Dans l’espace, un parallélogrammeABC D est défini par


 x quatre points (distincts et coplanaires) tels que
#» # » # » #» #» xp ‹
#» # »
‹
q
AB+ AD = AC. Si on note p = AB = yp et q = AD = yq alors la transformation de matrice M ∈ M3,2 (R)
zp zq

(suivie d’une translation de vecteur OA) envoie le carré unité du plan sur notre parallélogramme ABC D de
l’espace :
 
x p xq
M =  y p yq  .
z p zq

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

2.2. Coordonnées barycentriques


Triangle sur triangle.
Le but est d’envoyer le triangle « unité » du plan sur un triangle ABC quelconque du plan ou de l’espace.
#» # » #» #»
Cette transformation Φ doit envoyer i sur AB et j sur AC. Il existe une unique telle transformation affine
Φ.
y
v C


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

A(1 : 0 : 0) γ⩽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

Passage de (u, v) à (α : β : γ).


Il y a 3 coordonnées barycentriques α, β, γ, mais comme elles sont définies à un facteur multiplicatif λ près,
il y a seulement deux degrés de liberté.
Proposition 1.
#» #»
• Si P = A + uAB + v AC alors P a pour coordonnées barycentriques (1 − u − v : u : v).
#» # » β
• Réciproquement, si P a pour coordonnées barycentriques (α : β : γ) alors P = A+uAB + v AC avec u = α+β+γ
γ
et v = α+β+γ .
TEXTURE 144

#» #» #» #»
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 .

Passage de (u, v) à (x, y).


Nous avons deux façons de repérer un point P du plan ou de l’espace, d’une part les coordonnées cartésiennes
(x, y) ou (x, y, z) et d’autre part les coordonnées (u, v) associées aux coordonnées barycentriques (1 − u − v :
u : v). Voici comment passer de l’une à l’autre.
Proposition 2.
1. Dans le plan
         
x u x u −1 x − x A
= T2 + A = T2
y v yA v y − yA
où  
x B − xA x C − xA
T2 = .
yB − yA yC − yA
2. Dans l’espace
     
x   xA x B − xA x C − xA
 y  = T3 u +  yA où T3 = yB − yA
 y C − yA  .
v
z zA zB − zA zC − zA
On a    
u −1 x − x A
= T2
v y − yA
où T2 est la matrice du cas précédent.
#» #»
Démonstration. Il s’agit encore une fois juste de l’écriture de l’égalité P = A + uAB + v AC en coordonnées
cartésiennes.
 
a b
On sait que si M = est inversible alors
c d
 
−1 1 d −b
M =
det M c a

a b
det M = = ad − bc.
c d
   
On rappelle que det(M ) est l’aire (avec signe) du parallélogramme formé par #» #»
a b
p = et q = .
c d
1
Autrement dit c’est le double de l’aire du triangle. Ainsi A△ = 2 det(M ).

 

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. Autres figures géométriques

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

Voici plusieurs façons d’étendre un motif :


• répétition : le motif de base est répété par translations,
• miroir : le motif de base est répété par symétries axiales,
• bord : on entoure le motif d’une couleur neutre, pour éviter les problèmes au bord de la face lors de
l’application de la texture,
• extension/ clamp : on étend le motif en rajoutant une bande de sécurité tout autour du motif (cette bande
n’est pas sensé servir au-delà d’une largeur d’un pixel), c’est encore une fois pour éviter les problèmes
de bord.

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

3.2. Pixel le plus proche


Jusqu’à présent nous avons présenté le texturage avec des calculs exacts où (u, v) ∈ [0, 1]2 et (x, y, z) ∈ R3 .
Mais dans la pratique on travaille avec des coordonnées qui correspondent à des pixels. On rappelle comment
se déroule le texturage inverse : pour colorier le point (x, y, z) d’un objet, on lui associe les coordonnées
réelles (u, v) ∈ [0, 1]2 et on le colorie selon la couleur C (u, v).
TEXTURE 146

Φ (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

Au centre (i, j) d’un pixel on associe les réels


1 1
‚ Œ
i+ 2 j+ 2
(u, v) = , ∈ [0, 1]2
N N

. .
.
. .
(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.

3.3. Interpolation bilinéaire


Pour éviter les problèmes précédents, il est raisonnable de tenir compte de la couleur de plusieurs pixels
proches et pas seulement de celui le plus près. L’interpolation bilinéaire tient compte des 4 pixels les plus
proches.
De façon générale considérons une fonction F (x, y) qui pour l’instant est définie uniquement pour des
valeurs entières, c’est-à-dire on connaît F (x i , y j ) pour x i , y j ∈ Z. Comment interpoler une valeur pour
F (x, y) avec (x, y) ∈ R2 ?
On note (x 1 , y1 ), (x 1 , y2 ), (x 2 , y1 ), (x 2 , y2 ) les sommets à coordonnées entières du carré qui entoure (x, y).
On note x ′ = x − x 1 et y ′ = y − y1 . Alors l’interpolation bilinéaire de F est définie par :
F (x, y) = (1 − x ′ )(1 − y ′ )F (x 1 , y1 )
+ (1 − x ′ ) y ′ F (x 1 , y2 )
+ x ′ (1 − y ′ )F (x 2 , y1 )
+ x ′ y ′ F (x 2 , y2 )

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

Il est facile de voir que :


a0 + a1 u + a2 v
   
u
ϕ(u, v) = H̄  v  =  b0 + b1 u + b2 v 
1 1 + c1 u + c2 v
Ce qui en coordonnées homogènes est exactement (x : y : 1) et correspond bien à (x, y). Il existe des
méthodes pour déterminer les coefficients de H̄ sans résoudre le système linéaire 8 × 8, mais elles sont plus
sophistiquées et nous ne les détaillerons pas ici.
L’application inverse ψ = ϕ −1 transforme le quadrilatère en un carré. C’est très utile pour « redresser » une
image qui n’a pas été prise avec le bon angle de vue. Ci-dessous à gauche l’image originale, à droite sa
transformation projective bien choisie.

Voici les équations de ψ = ϕ −1 : (x, y) 7→ (u, v) :


−a0 b2 + a2 b0 + (−b0 c2 + b2 )x + (a0 c2 − a2 ) y
u=
a1 b2 − a2 b1 + (b1 c2 − b2 c1 )x + (−a1 c2 + a2 c1 ) y
et
−a0 b1 + a1 b0 + (−b0 c1 + b1 )x + (a0 c1 − a1 ) y
v=− .
a1 b2 − a2 b1 + (b1 c2 − b2 c1 )x + (−a1 c2 + a2 c1 ) y

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.

3.8. Du cube vers la sphère


Nous avons vu qu’il est très facile de réaliser le texturage d’un cube à l’aide de son patron. Pour texturer une
sphère il peut être intéressant de d’abord texturer un cube puis de le déformer en une sphère. Comme les
équations générales peuvent devenir assez compliquées on va s’intéresser au problème du plan : comment
transformer un carré vers un cercle (et inversement) ?
Considérons le carré C = [−1, 1]2 (de côté de longueur 2) et le disque (fermé) D de centre (0, 0) et de rayon
1. On note (x, y) avec −1 ⩽ x ⩽ 1 et −1 ⩽ y ⩽ 1 les coordonnées pour le carré et (u, v) avec u2 + v 2 ⩽ 1
les coordonnées pour le disque. Il y a plusieurs façons de déformer un disque en un carré
TEXTURE 154

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

Les équations inverses G : C → D, (x, y) 7→ (u, v) permettent de passer du carré au disque :


 2

sgn(x) p x 2
si x ⩾ y 2 sgn(x) p x y si x 2 ⩾ y 2
x 2+ y2 x 2+ y2
u= v= 2
sgn( y) p x y si x 2
< y 2 sgn( y) p y si x 2 < y 2
x +y
2 2 x +y
2 2

Voici le carré et sa transformation en un disque :

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 :

Voici le disque et sa transformation en un carré :

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.

1. Les ancêtres du lancer de rayons


Nous allons voir deux algorithmes qui permettent de transformer une scène en une image comme si on
voyait les objets du dessus et d’assez loin.

1.1. Algorithme du z -buffer


Il s’agit en quelque sorte de lancer des rayons parallèles à l’axe (Oz) et, pour chaque pixel, de calculer quel
est l’objet le plus proche.

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

Algorithme (Algorithme du z-buffer).


Pour chaque (i, j) :
• Initialiser prof à +∞.
• Pour chaque objet Ok :
— si (i, j, z, Cl) vérifie z < prof :
— colorer le pixel (i, j) de l’écran avec la couleur Cl,
— faire prof ← z.

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.

1.2. Algorithme du peintre (z -sorting)


Son nom vient de l’analogie avec un peintre qui part d’une toile blanche puis applique de la peinture en
plusieurs touches et retouches ; à la fin seules sont visibles les couleurs de la couche supérieure. La démarche
est semblable à la méthode précédente, mais ici on suppose que les objets ne s’entrelacent pas dans la
profondeur.
La première partie de l’algorithme consiste à ordonner les objets du plus loin (z grand) au plus proche (z
petit).
LANCER DE RAYONS II 159

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

Étape 1 Étape 2 Étape 3

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

2.1. Lancer depuis la source lumineuse


L’idée naturelle, et qui correspond à la réalité physique, est la suivante, dans sa version la plus simple :
• un rayon part de la source lumineuse,
• il vient frapper un objet,
• il y est réfléchi,
• et ce rayon réfléchi atteint la rétine (ou l’objectif de la caméra).

Source lumineuse
Objet

Observateur

Les complications arrivent assez vite :


• La source lumineuse émet plusieurs rayons, éventuellement dans plusieurs directions, et donc plusieurs
rayons atteignent la rétine.
• Un rayon ne se réfléchit pas toujours comme sur un miroir, mais rebondit vers différentes directions : on
renvoie de nouveau au chapitre « Lumière » pour la composante de luminosité diffuse et la composante
de luminosité spéculaire.

Plusieurs rayons arrivent à la rétine Diffusion

• 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.

Lumière ambiante Plusieurs sources lumineuses


LANCER DE RAYONS II 162

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.

2.2. Lancer depuis l’observateur


Nous savons que la rétine et l’objectif ne sont pas réduits à un point : ce sont des surfaces. Modélisons la
situation :
• le fond de l’œil est représenté par un point O,
• la rétine ou l’objectif est modélisé par un écran (virtuel) qui est une grille de pixels,
• nous avons une scène composée d’objets 3D,
• et une source lumineuse.

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

Voici le principe du ray-tracing dans sa version simple afin de colorier un pixel Ei j :


• On lance un rayon issu de l’œil O, passant par le (centre du) pixel Ei j .
• On calcule le premier point d’intersection P de ce rayon avec les objets de la scène.
LANCER DE RAYONS II 163

• 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

2.3. Rappel sur la lumière


Voici quelques rappels du chapitre « Lumière ». Le but est de calculer la couleur perçue d’un objet. Cette
couleur se calcule dans le modèle de Phong par l’addition de trois types de luminosité :
• luminosité ambiante Clamb ,
• luminosité diffuse Cldiff ,
• luminosité spéculaire Clspec .
La couleur perçue est l’addition de ces couleurs :

Clperçue = Clamb ⊕cl Cldiff ⊕cl Clspec

Lumière ambiante Lumière diffuse Lumière spéculaire


LANCER DE RAYONS II 164

Lumière diffuse, ambiante et spéculaire

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 :

Clamb = isource Clsource ⊗cl 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

La formule de la couleur diffuse est résumée en :



Cldiff = isource max( ℓ · #»
n , 0) Clsource ⊗cl Clobjet
LANCER DE RAYONS II 165

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

2.4. Ombre et sources lumineuses


Le dernier rayon, lancé du point P de l’objet vers la source lumineuse S s’appelle le rayon d’ombre (shadow
ray).

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

éclairé mi-ombre ombre mi-ombre éclairé


LANCER DE RAYONS II 167

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

éclairé gradient ombre gradient éclairé

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.

2.5. Réflexions multiples


Le ray-tracing prend toute sa force lorsqu’on considère les réflexions multiples qui donnent un éclairage
indirect. Ainsi chaque objet peut être une source lumineuse pour les autres objets.
LANCER DE RAYONS II 168

O2

Q
O S

ect
ndir
i
rect

age
e di
rag
clai

ir
é

écla
P

O1

Dans la situation ci-dessus, le point P de l’objet O1 est éclairé de deux façons :


• par éclairage direct via un rayon issu de P dirigé vers S (comme auparavant),
• par éclairage indirect via l’objet O2 .
Expliquons comment calculer la composante issue de l’éclairage indirect.

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 .

Souvenez-vous que les flèches « → » et « ← » indiquent le sens des rayons du ray-tracing.

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

Facteur de réflexivité. Le coefficient kQ est un nombre réel entre 0 et 1 et dépend de la matière en Q. Un


matériau absorbant aura un coefficient nul, un miroir aura un coefficient 1. Il est aussi important de garder
à l’esprit qu’un rayon lumineux ne perd pas en intensité, quelle que soit la distance parcourue, tant qu’il
ne rencontre pas d’obstacle. Notez bien que le rayon indirect (de P vers Q) est celui obtenu par réflexion
parfaite. On pourrait considérer que ce modèle n’est pas réaliste et que la lumière se diffuse en Q, dans ce
cas on diminue l’intensité perçue en Q proportionnellement au carré de la distance PQ.
Couleur au point de réflexion. Pour une meilleure modélisation il faut tenir compte de la couleur de la
surface d’où provient la lumière indirecte. Ainsi une lumière blanche qui se réfléchit sur un objet vert en Q,
dir
va réfléchir une lumière verte vers P. Ceci est pris en compte dans le calcul de l’éclairage direct en Q, ClQ(←P)
pour lequel les formules des luminosités ambiante, diffuse et spéculaire tiennent compte de la couleur de
l’objet Clobjet en Q.
Réflexions multiples. Dans les explications précédentes nous n’avons considéré qu’un seul rebond indirect
(au point Q). Pour les réflexions multiples il faut itérer le processus à partir du point Q. Sur le dessin
ci-dessous la source lumineuse n’éclaire pas directement le point P, ni l’objet O1 (dans l’ombre), ni la face
supérieure de l’objet O2 . Seul l’objet O3 est éclairé directement.
LANCER DE RAYONS II 170

O1
Q1
O3
Q3

r#»2

r#»1 r#»3
O

ℓQ 3
Q2
r#»0 O2

P
O

Pour calculer l’éclairage indirect en P, vu de O :



• on lance un rayon r0 de O vers P,

• par symétrie par rapport à la normale en P, on lance un rayon r1 de P vers un point Q 1 ,

• par symétrie par rapport à la normale en Q 1 , on lance un rayon r2 de Q 1 vers un point Q 2 ,

• par symétrie par rapport à la normale en Q 2 , on lance un rayon r3 de Q 2 vers un point Q 3 ,

• depuis Q 3 on lance un rayon d’ombre ℓQ 3 vers la source lumineuse S.
On remonte ensuite notre construction : on calcule la luminosité directe perçue en Q 3 (depuis Q 2 ) : ClQ 3 .
Ainsi la luminosité indirecte perçue en Q 2 est kQ 3 ClQ 3 , celle en Q 1 est kQ 2 kQ 3 ClQ 3 et au final la luminosité
indirecte perçue en P est :
Clindir
P = kQ 1 kQ 2 kQ 3 ClQ 3 .
Dans cet exemple on a considéré que les objets intercalés ne changent pas la couleur de la lumière mais juste
son intensité. Nous étudierons la formule de récurrence générale juste après. Comme chaque coefficient k
est inférieur à 1, l’intensité de la lumière indirecte diminue à chaque réflexion et devient vite négligeable
après 1, 2 ou 3 réflexions. Il existe cependant une exception : dans le cas d’un miroir parfait où k = 1,
on peut avoir (en théorie) une infinité de réflexions ; c’est un phénomène que vous avez sûrement déjà
expérimenté en vous plaçant entre deux miroirs parallèles.

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.

Image – Éclairage direct

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.

Image – Éclairage indirect

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 ′

Rayon traversant une paroi de verre

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.

2.7. Mise en œuvre


Expliquons les grandes lignes de l’algorithme de ray-tracing. C’est un excellent projet de le programmer
mais cela demande plusieurs jours de travail. Ci-dessous une scène avec cinq objets, dont un transparent,
devant un miroir, avec deux sources lumineuses.
LANCER DE RAYONS II 174

Au préalable nous devons disposer de :



• une fonction lancer_rayon(O,r) qui calcule les points d’intersection d’un rayon r0 issu de O avec les
objets de la scène et renvoie le point P le plus proche,
dir
• une fonction couleur_directe(P,O) qui renvoie la couleur Cl P(←O) en P perçue de O, obtenue par
addition des couleurs ambiante, diffuse et spéculaire.
On souhaite attribuer une couleur au pixel Ei j de l’écran, pour cela on calcule le rayon r#»0 de O vers Ei j . On
note P le premier point d’intersection de r#»0 avec la scène, si le rayon ne coupe aucun objet on colorie le
pixel par la couleur de fond.
Il s’agit ensuite de définir une fonction couleur(P,O) qui calcule la couleur Cl P(←O) obtenue par ray-tracing.
Cette fonction est une fonction récursive (elle s’appelle elle-même).
Structure de couleur(P,O) :
1. On teste la condition d’arrêt.
2. On calcule la couleur directe Cldir
P(←O)
en P perçue de O.
3. on note r#»0 le rayon de O vers P et r#»1 le rayon obtenu par réflexion parfaite en P ; on calcule Q 1 le
premier point d’intersection de r#» avec la scène.
1

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

3. Intersection efficace avec un triangle


Dans le chapitre « Lancer de rayons I » nous avons vu comment calculer l’intersection d’un rayon avec des
objets géométriques simples. Les figures géométriques les plus importantes sont les triangles de l’espace qui
correspondent aux faces d’un maillage triangulaire. Nous allons donc calculer plus efficacement l’intersection
d’un rayon avec un triangle.

3.1. Rayon lancé sur un triangle


Considérons un triangle de l’espace défini par trois points A, B, C non alignés. On lance un rayon issu de S
dans la direction #»
v . On suppose que le rayon n’est pas parallèle au plan P contenant le triangle. Notons P
le point d’intersection du rayon avec ce plan P .
LANCER DE RAYONS II 176

C . P

.
S
v .
P
.B
.A

Il existe donc t ∈ R tel que :


P = S + t #»
v
et comme P est dans le plan (ABC), il existe u, v ∈ R tels que :
−→ −→
P = A + uAB + v AC.
Le point P est situé à l’intérieur (ou sur le bord) du triangle ABC si et seulement si 0 ⩽ u ⩽ 1 et 0 ⩽ v ⩽ 1.
Pour les explications sur les coordonnées barycentriques (1 − u − v : u : v) on renvoie au chapitre « Texture ».


v AC
.P


A uAB

Nous trouvons t, u, v en résolvant le système linéaire de 3 équations et 3 inconnues, donné par :


−→
S + t #»


v = A + uAB + v AC
En écrivant les coordonnées :
         
xS xv xA x B − xA x C − xA
 yS  + t  y v  =  yA + u  yB − yA + v  yC − yA .
zS zv zA zB − zA zC − zA
Notons
x v −(x B − x A) −(x C − x A)
     
t xA − xS
M = y v −( yB − yA) −( yC − yA)
  X = u
 Y =  yA − yS 
z v −(zB − zA) −(zC − zA) v zA − zS
Le système linéaire équivaut à l’équation matricielle, d’inconnue X :
M X = Y.
On peut alors mettre en œuvre différentes techniques d’algèbre linéaire :
1. calcul de l’inverse M −1 , puis X = M −1 Y ,
2. la méthode du pivot de Gauss,
3. les formules de Cramer.
C’est cette dernière méthode que nous allons détailler, mais auparavant rappelons comment calculer un
déterminant.
LANCER DE RAYONS II 177

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

Le déterminant de M , que l’on peut aussi noter det( #»u , #»


v , #»
w), est égal au volume du parallélépipède formé
par les trois vecteurs.
La formule du produit mixte (triple product) redonne aussi le déterminant :
det( #»
u , #»
v , #»
w) = #» u · ( #»
v ∧ #»
w).
Il faut donc d’abord calculer un produit vectoriel puis un produit scalaire. L’ordre des vecteurs est important
pour le signe du déterminant.

3.3. Méthode de Cramer


La règle de Cramer est une formule qui donne la solution d’un système linéaire ayant autant d’équations que
d’inconnues. On se contente de l’expliquer dans le cas 3 × 3. Considérons le système d’équations linéaires à
3 équations et 3 inconnues suivant :
 a11 x 1 + a12 x 2 + a13 x 3 = y1

a21 x 1 + a22 x 2 + a23 x 3 = y2


a31 x 1 + a32 x 2 + a33 x 3 = y3

Ce système peut aussi s’écrire sous forme matricielle M X = Y où


     
a11 a12 a13 x1 y1
M = a21 a22 a23 ∈ M3 (R),
  X = x2
 et Y =  y2  .
a31 a32 a33 x3 y3
Définissons les matrices M1 , M2 , M3 en remplaçant la j-ème colonne de M par le second membre Y :

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

Si le rayon ne coupe pas la boite B, alors il ne coupe pas l’objet O.

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 ne coupe pas la boite


(donc ne coupe pas l’objet)

Le rayon coupe
la boite et l’objet

4.2. Différents volumes englobants


Voici différentes types de volumes englobants :
• une boite,
• un rectangle (2D) ou un parallélépipède rectangle (3D) (dont les faces ne sont pas nécessairement
parallèles aux axes),
• une intersection de tranches. Une tranche (slab) est la région du plan comprise entre deux droites
parallèles (dans l’espace c’est la région comprise entre deux plans parallèles),
• un cercle ou une sphère.

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. . .

Version 0.1 – Septembre 2023

Vous aimerez peut-être aussi