Représentation Représentation frontière
frontière
--11ièreière partiepartie –– 2D : 2D : PolygonesPolygones
Boundary representation (Brep)
1. Rappels de géométrie
2. Representation informatique
3. Calcul de l’aire et localisation d’un point...
4. Détection des collisions (Minkowski)
5. Opérations booléennes
1. Rappels de géométrie 1. Rappels de géométrie
Produits vectoriel, produit scalaire Représentation d’une courbe
Polygones
Produit Vectoriel Produit Vectoriel
V U W
r r
r = ∧
W w Wr r r =
) sin(θ V
U W
r r r =
=
z y x
u u u U
r
U r V
r W
r Wr = Ur Vr sin(θ)
θ
−
=
−
=
−
=
=
z y y
x z
z x x
z y
y z z
y x
v u v
u w
v u v
u w
v u v
u w
W
. .
. .
. .
Scilab : W=cross (U,V)
4
Produit scalaire Produit scalaire
y P
V U w
r r
= . U
r
) cos(θ V
U w
r
= r
V V V
r r r
2 . ' =
V r
5
O x
ur V
r
θ
V V V = .
u V
Vr r r
) cos(
'= θ
z
Projection sur l’axe
ur
Scilab : a = U*V’
=
=
z y x
z y x
z y
z x
z
z y y
x y
z x y
x x
u
u w
u w
u w
v v v
u u
u u
u
u u u
u u
u u u
u u
V P
. . .
. .
. .
. .
*
2 2
2
Pu est la matrice de projection sur l’axe
z z y
y x
x v u v u v
u
w = . + . + . V
U w=t *
Représentations d’une courbe Représentations d’une courbe
Représentation algébrique
Représentation paramétrique
a x + b y + c = 0 (implicite)
a2 + b2 = 1 (normalisée) x(t) = a1*t+b1
y= A x + B ou x= A y + B (explicite)
Exemple de la droite
Représentation vectorielle :
7
x(t) = a1*t+b1 y(t) = a2*t+b2 (O,u) ou (P1,P2)
P1
P2
ur
t
x(t) y(t)
Représentation
Représentation vectoriellevectorielle paramétriqueparamétrique
x(u) = a0*u+b0 y(u) = a1*u+b1
{
u=0
u=1
x0 y0
( )
x1 y1
( )
x(u) = x *?+ x *?
{
Exemple d’une droite ou d’un segment
Une courbe polynomiale paramétrique contrôlée par les points
X(u) = Σ Xi Pim(u)
m i=0
x(u) = x1*?+ x0*?
y(u) = y1*?+ y0*?
{
x(u) = x1*u+ x0*(1-u)y(u) = y1*u+ y0*(1-u)
{
P0(u) P1(u)
8
Exemple : la courbe de Bézier Exemple : la courbe de Bézier
Pim(u)=(m!/((m-i)! i!)) ui(1-u)m-i X(u) = Σ Xi Pim(u)
m i=0
P03
P13 P23 P33
x(u) x0 x1 x2 x3 y(u) y0 y1 y2 y3
( )
=( )
1 u u2 u3 1 -3 3 -1
0 3 -6 3 0 0 3 -3 0 0 0 1
Convention : 00 = 1
Représentations du cercle Représentations du cercle
Représentation algébrique
Représentation paramétrique
Représentation géométrique :
10
Représentations du cercle Représentations du cercle
Représentation algébrique
a*(x-x0)2 + b*( y – y0) 2 +- r2 = 0 (implicite) a2 + b2 = 1 (normalisée)
Représentation paramétrique
Représentation géométrique :
11
x(t) = r * cos(t) y(t) = r * sin(t)
(O,r) ou (P1,P2,P3)
Questions : sur les droites Questions : sur les droites
1. Distance d d’un point P(x,y) à une droite ?
2. Position d’un point P(x,y) par rapport au ½ espace limité par une droite ?
3. Intersection de 2 droites ?
4. « « d’une droite et d’un segment ?
14
Position et distance d’un Position et distance d’un Point/Droite
Point/Droite
X
Avec la représentation algébrique ?
) ( yx, X
15
X
Avec a2 + b2 =1
Position et distance d’un Position et distance d’un Point/Droite
Point/Droite
X
d X
P
ur ∧ =
Avec la représentation vectorielle ?
) ( yx, X
16
P1
P2
X
ax+ by +c = 0
1 0
2
1P ∧ P X =
P
d X
P
ur ∧ 1 = ur
Avec a2 + b2 =1
Point d’intersection d’un segment Point d’intersection d’un segment avec une droite
avec une droite
PI
P2
18
P1
Avec représentation algébrique :
Détection de l’intersection des droites ?
Détection de l’intersection du segment et de la droite ? Calcul de l’intersection…
Point d’intersection d’un segment Point d’intersection d’un segment avec une droite
avec une droite
Droite : Ax+By+C=0 Droite : x(t)=a1t+b1
y(t)=a2t+b2
PI
P2
19
P1
Que dire si : ti > 1 ou ti < 0 ?
PI (x(ti), y(ti)) équation linéaire :
ti = -( Ab1+Bb2+C ) Aa1+Ba2
Polygones, Polyèdres Polygones, Polyèdres
I
U Polytopes* (EC, borné)
U : union
Polygones compact closed
manifold sets
I,C : Intersection et Complément de ½ espaces ouverts 20
½ espaces ouverts
I, C I
Nef-Polygones
Convexité (géométrie) Convexité (géométrie)
polytope
Polygone ou polyèdres
convexe
étoilé simple
α <= 180° α
21
Polygones simples et angles Polygones simples et angles
(4-2)*180° = 4*90° (3-2)*180° = 3*60°
Somme des angles internes = (n-2)*180°
(6-2)*180° = 720°
Somme des angles externes = 360°
22
60° 60° -120°
Exercice : Exercice :
Principe de l’algorithme qui détermine si un polygone est convexe en O(log(n))?
Modélisation-géométrique - O.Stab 23
Problème :
Problème : ConvexConvex Hull (2D)Hull (2D)
Écrire un algorithme de calcul d’enveloppe convexe d’un nuage de points à l’aide
des produits scalaire et vectoriel, des fonctions min, max et du tri.
Modélisation-géométrique - O.Stab 24
Problème :
Problème : ConvexConvex Hull (2D)Hull (2D)
Écrire un algorithme de calcul d’enveloppe convexe d’un nuage de points à l’aide
des produits scalaire et vectoriel, des fonctions min, max et du tri.
L’algorithme suivra les étapes suivantes :
1. Choisir un axe s’appuyant sur les points 1. Choisir un axe s’appuyant sur les points
extremum,
2. Trier les points suivant l’abscisse sur l’axe, 3. Calculer l’enveloppe convexe des points au
dessus de l’axe,
4. Faire la même chose pour les points en dessous.
Modélisation-géométrique - O.Stab 25
Connexité
Connexité ((topologietopologie))
Contour externe
Contour interne
• Connexité simple - polygone simple
lacets non-contractiles
Connexité par arc - composante connexe
interne
N
N non connexe Existe A,B séparés, N=AuB Si A et B fermés, A,B séparés AnB=0
A
B
27
Variétés (manifold) Variétés (manifold)
Une variété est de dimension 1 ssi le voisinage d’un point est homéomorphe à un segment
28
Une variété est de dimension 2 ssi le voisinage d’un point est homéomorphe à un disque
Introduction à la modélisation géométrique
Question :
Question : varietésvarietés ??
La frontière de ces objets est-elle une varieté de dimension D-1 ?
Trouvez un objet 2D régulier mais dont la frontière n’est pas une varieté de dimension 1 (1-manifold) ?
3D 2D
29 Introduction à la modélisation géométrique
Questions : polygones valides Questions : polygones valides
Donnez les caractéristiques des polygones suivant.
Lesquels ne sont pas valide et pourquoi ?
b)
30
a) c)
d)
e)
f) Ensembles régulier : A = Adh(Int(A))
2. Représentation informatique 2. Représentation informatique
31
Contraintes
Contraintes dd ’’intégritéintégrité
Ensembles régulier : A = Adh(Int(A)), Polygones
P1: Intersection réduites aux sommets communs Pas de polygones repliés
P2 : Un sommet appartient exactement à 2 arêtes
1
a)
b)
La frontière doit être une variété de dimension 1 (1-manifold)
P2 : Un sommet appartient exactement à 2 arêtes Polygones régulier à frontière 1-manifold
P3 : Il existe une orientation des arêtes telle que chaque sommet est origine d’une arête et extrémité d’une autre.
32
2 c)
d)
Notons que les PP l’intérieur et l’extérieur sont connus au niveau d’une arête :
l’orientation est dite « clockwise » or « counter clockwise » en fonction de la convention
Structure nécessaire ? Structure nécessaire ?
Un convexe
Plusieurs
(pour décrire un polygone dans les différents cas)
33
Un polygone simplement connexe
Un polygone non simplement connexe
Description des
Description des polygonespolygones
Polygon { nb_points
< x11,y11 >, … , <, x1i,y1i > … < x11,y11>,
< x21,y21 >, … , <, x2i,y2i > … < x21,y21>,
< xj1,yj1 >, … , <, xji,yji > … < xj1,yj1>
Fichiers de données (utilisateurs) pour PovRay
< xj1,yj1 >, … , <, xji,yji > … < xj1,yj1>
}
Scilab :
xfpolys(xpols,ypols[,fill])
34
Comment sait-on que l’on est sur le bord d’un trou ?
Comment peut-on connaitre le contour extérieur à partir d’un trou ?
Représentation
Représentation informatiqueinformatique
COORD NEXT 1 6, -3 1 2 2 10, 0 2 3 3 7, 0 3 4 4 6, 4 …
… …
COORD= [6, -3; 10, 0; 7, 0; …]; …
… … 8 0, 0 8 1
35
COORD(1,:)
LOOP(1) LOOP(2)
NEXT(1) NEXT(2)
Représentation
Représentation informatiqueinformatique
CGAL::Polygon_2< Point_2<Kernel>, Container >
CGAL::Polygon_with_holes_2< Kernel, Container >
36
Point_2 P=vertex(1)
LOOP1.begin() LOOP2.begin()
Vertex_circulator ++
Edge_circulator ++
Représentation
Représentation informatiqueinformatique
d h
g
4 5
6 7
9
… 8 e
f i
Le BSP Tree
43
a
b c
d
1 2
3 8 5
… e
Skip >
Représentation
Représentation informatiqueinformatique
d h
g
4 5
6 7
9
… 8 e
f i
Le BSP Tree
44
a
b c
d
1 2
3 8 5
… e
Binary
Binary SpaceSpace PartitioningPartitioning TreeTree
a
b d
f
c e
g
1 4
2 3
aax + bay + ca = 0
> 0
< 0
> 0
> 0
> 0 < 0
45
f
i
g h
2 3
5 6 …
7 8
9
aax + bay + ca < 0 et abx + bby + cb > 0 et
acx + bcy + cc > 0
3 = > 0
3. Interrogation du
3. Interrogation du modèlemodèle
48
?
CGAL (
CGAL (polygonpolygon package)package)
The following algorithms are available:
find the leftmost, rightmost, topmost and bottommost vertex.
compute the (signed) area.
check if a polygon is simple.
Algo ?
check if a polygon is simple.
check if a polygon is convex.
find the orientation (clockwise or counterclockwise) check if a point lies inside a polygon.
50
http://doc.cgal.org/latest/Polygon/classCGAL_1_1Polygon__2.html
Algo ?
Calcul
Calcul de lde l ’’aireaire
f(x)
Sur une représentation :
• Algébrique : f(x) = y = A x + B
•Paramétrique : xi(t), yi (t)
•Vectorielle :
+1 i iS S
Si
S
51
Si+1
Calcul
Calcul de lde l ’’aireaire
f(x) Exemple cas linéaire :
f(x)= (x-xi)(yi+1–yi)/(xi+1–xi)+ yi Approche triviale : représentation algébrique explicite : y = A x + B
xi x i+1
f(x)= (x-xi)(yi+1–yi)/(xi+1–xi)+ yi Ou encore
f(x)=Ax+B
avec A=(yi+1–yi)/(xi+1–xi) et B=(xi+1 yi–xiyi+1)/(xi+1–xi)
52
f(x)
Calcul
Calcul de de l’Airel’Aire
Avec changement de variable : représentation paramétrique x
0 u
1 xi
xi+1
xi x i+1
Exemple cas linéaire : t(u) = uxi+1 +(1-u)xi f(t(u))= uyi+1 +(1-u)yi
x = t(u), u dans [0:1]
0 1
53
Calcul
Calcul de lde l ’’aireaire
Approche pragmatique (vectorielle)
Algorithme :
« Calcul » du point O, A=0
Si
S
∑−
= + − +
= 1
0
1
1 )
2 ( 1 n
i
i i i
iy x y
x A
« Calcul » du point O, A=0
Pour toutes les sommets du poly 2 1
1
Λ +
+
= A OSi SiSi A
56
O
Si+1
Aire
Aire & Centre de & Centre de gravitégravité
f(x)
Formules (rappels)
∑− + − +
= 1( 1 1 )
2 1 n
i i i
iy x y
x
A ∑
= + − +
=
0
1
1 )
2 i (xiyi xi yi A
∑−
= + + + − +
= 1
0
1 1
1)( )
6 ( 1 n
i
i i i
i i
i
G x x x y x y
x A
∑−
= + + + − +
= 1
0
1 1
1)( )
6 ( 1 n
i
i i i
i i
i
G y y x y x y
y A
57
Point
Point dansdans polygonepolygone ??
60
Point dans polygone ? Point dans polygone ?
P2 P3
P Point dans un triangle ?
61
P1
P
Et si on ne connait pas l’orientation du triangle ?
Point
Point dansdans polygonepolygone ??
Le principe
2 1
4
0
5
1 1
2
67
Point
Point dansdans polygonepolygone ??
Le principe
+1 2 0
Yp
r2 r0
+1
0
0 0 Yp
Xp
r3 r1
r2 r0 Les cas simples
Compter les intersections (1) Compter les intersections (1)
r3 r4
r1 r5 r6
+1 +1
69
r2 r0 Singularité simples
0
Compter les intersections (2) Compter les intersections (2)
r3 r4
r1 r5 r6
+1
θ
70
r2 r0 Singularité compliquée
Compter les intersections (3) Compter les intersections (3)
r3 r4
r1 r5 r6
+1
71
r2 r0 Cas terminaux
SurS
Compter les intersections (4) Compter les intersections (4)
r3 r4
r1 r5 r6
SurA
72
Point dans polygone ?
L ’algorithme
r0 r1 r2 r3 r4 r5 r6 r0
r1
SurS SurS +1
+1
0 0
0 0
0 0
r1 r2 r3 r4 r5 r6
SurA 0
0 0
0 0
SurS SurS
SurS SurS SurS
SurS SurS SurS
SurS SurS
SurS
0 0 SurA 0
0 0 0
0 0
Test de l ’angle Parcours structure
73
Autres algorithmes Autres algorithmes
74
http://geomalgorithms.com/
From Dan Sunday
Exercice :
Exercice : findfind in CGAL doc.in CGAL doc.
Dans la documentation CGAL (www.gcal.org) retrouvez l’équivalent de la fonction
point_dans_ polygone(). Vérifiez que
l’algorithme repose sur le même principe que celui présenté en cours, justifiez (extraire les celui présenté en cours, justifiez (extraire les lignes correspondantes).
78
4. Intersection et collisions 4. Intersection et collisions
79
Skip >
End >
Intersection avec une droite 2D ? Intersection avec une droite 2D ?
P2
> 0
∧ PP X
P
Le polygone = {Pi (xi,yi)}
80
P2
P1
2 0
1
1X ∧ PP =
P
2 0
1
1X ∧ PP >
P
2 0
1
1X ∧ PP <
P
Intersection de 2 polygones Intersection de 2 polygones
1. Détecter : englobants & structures
2. Calculer/estimer : C= AnB
3. Éviter (trajectoire) : somme de Minkowski
84
Définir la zone accessible Détecter une collision
AABB
AABB : Axis-Aligned Bounding Box
85
Balayage
Boites d’encombrement Boites d’encombrement
et géométries englobantes
86
Boites hiérarchiques Rotation AABB (vs OBB, cercle)
Oriented
Oriented BoundingBounding BoxBox
Même dans des environnements
87
Même dans des environnements statiques on peut préférer des OBB
Volumes englobant Volumes englobant
45°
45°
d(C1,C2)<R1+R2
88
d(C1,C2)<R1+R2
?
Principe : 2 convexes non intersectant peuvent être séparé par une droite D // à un côté d’un polygone Algo : Trouver Di, les projetés des 2 polygones sur la droite Di sont disjoints
?
Détecter l’intersection Détecter l’intersection
Hiérarchie Volume englobant
89
Structures d’accès / subdivision spatiale**
*Q.Avril
**Autre approche que l’on verra plus tard (algorithmique géométrique)
Balayage
Éviter les «
Éviter les « CollisionsCollisions »»
P1 P1
P1
On veut éviter l’intersection P1 en mouvement (de translation)
93
P2
Planification de trajectoires P2 immobile = obstacle
«
« CollisionCollision » entre 2 polygones» entre 2 polygones
P1
P1
« configuration space »
Robot
P1’(0,0) Somme de Minkowski
94
P2 Obstacle
P2 Obstacle
FS(P2,P1) = P2 + P1’(0,0) Intersection P1 n P2 =0 ? Point « c1 » hors FS(P2,P1) ?
«
« CollisionCollision » entre 2 polygones» entre 2 polygones
P1
P1 P1’(0,0)
?
95
P1
P2 Obstacle
P2 Obstacle
FS(P2,P1) = P2 + P1’(0,0)
?
?
?
?
?
«
« CollisionCollision » entre 2 polygones» entre 2 polygones
P1
P1’(0,0) -P1(0,0)
P1
96
P1
P2 Obstacle
P2 Obstacle
FS(P2,P1) = P2 + -P1(0,0)
Sommes de Minkowski Sommes de Minkowski
Polygones convexes
Vr= Pr SUIV[Pr]
Vp=Pp SUIV[Pp]
Si( PrV( Vr, Vp )> 0 )Alors Pr = SUIV[Pr]
FS = FS u { Pp + Pr }
Vp Pp Vr
Pr Pp
Vr
VSi Pr
97
Les sommets du polygone P1+P2 = sommets de P2 + VSi
Pr Pp
FS = FS u { Pp + Pr } Sinon Pp = SUIV[Pp]
FS = FS u { Pp + Pr }
Vr Vp Vp
Vr
Pr Vp
Vr Pr Vp Pp
Pr Vp
VSi Pp
Sommes de Minkowski Sommes de Minkowski
Polygones non convexes
Dilatation Décomposition en convexes
98
Opération booléenne d’union entre les 2 polygones dilatés
U
Motion planning…
Motion planning…
2D : jeux vidéo
rotation translation Somme de Minkowski
99
rotation
3D : Robotique
5. Opérations booléennes 5. Opérations booléennes
= TRUE
100
Skip >
End >
Opérations booléennes Opérations booléennes
Fr(B)dans A
Fr(A)dans B Fr(B)hors A
Fr(AnB) = Fr(AuB) =
Fr(A) hors B Fr(A), Fr(B)
AnB AuB
A B
102
Opérations booléennes Opérations booléennes régularisées
régularisées
103
Opérations booléennes Opérations booléennes régularisées
régularisées
Fr(A)dans B Fr(B)sur- A
Fr(B)dans A
Fr(A)dans B
Fr(B)sur+ A
104
Fr(AnB) = Fr(A) dans B + Fr(B) dans A + Fr(B) sur + A
Opérations booléennes Opérations booléennes régularisées
régularisées
Fr(AuB) = Fr(A) hors B + Fr(B) hors A + Fr(B) sur +A Fr(A-B) = Fr(A) hors B + Fr(B) dans A + Fr(B) sur - A
106
6. Transformations &
6. Transformations &
coordonnées Homogènes coordonnées Homogènes
End > 108
Transformations : la rotation Transformations : la rotation
( )
−
= sin( ) cos( ) ) sin(
) cos(
α α
α α α
Rz
Composition : Roz(α)o Roz(β) = Roz(α+β)
+
=
−
= =
= sin( ) cos( )
) sin(
) ) cos(
)(
( '
' '
α α
α α α
y x
y
y x
P x R
P z
Rappels de géométrie (1)
109
=
= =
) sin(
) cos(
θ θ r
y r P x
x
y P
α
R P’
θ
+
=
+
= =
) sin(
) cos(
' ' '
θ α
θ α r
y r P x
En coordonnées polaires
Rotations et complexes Rotations et complexes
P ( x + i y )
P ( r ( cos(θ) + i sin(θ)) )
Représentation complexe :
P ( x - i y ) P = P.P
y P
Conjugué :
Comment représenter une rotation sous la forme d’un complexe ?
110
P1.P2 = x1.x2 –y1.y2+ i (x1.y2+y1.x2) x
y P
θ R
P
Multiplication :
Conjugué :
rotation d’angle α
multiplication par un complexe d’arg α et de norme 1
P1.P2 = r1.r2 ( cos(α1+α2) + i sin(α1+α2) )
Transformations en Coordonnées Transformations en Coordonnées
Homogènes Homogènes
z
= 1
y x
Pc
= y Pc x
Coordonnées Homogènes géométrie projective d=2
( ) ( ) ( )
( ) ( )
−
=
1 0
0
0 cos
sin
0 sin
cos
θ θ
θ θ
z θ R
=
1 /
1 / y Pc x
Matrice de transformation dans Rd+1
112
z=1
x y z
Pc
0 0 1
=
1 0
0
1 0
0 1
y x
T t
t
M
1
y
Pc ‘ = MT * Pc x
Bibliographie Bibliographie
Introduction à la modélisation et à l’algorithmique géométrique Olivier STAB
◦ http://people.mines-paristech.fr/olivier.stab/geomodeling.pdf
Geometric Modeling
Michael MORTENSON -Wiley Michael MORTENSON -
Computer Graphics, principles and practice
Foley, Van Dam, Feiner, Hughes - Addison Wesley Advanced Animation and Rendering Techniques,
Alan & Mark Watt, Addison Wesley
Modélisation et construction de surfaces pour la CFAO, J.C. Léon, Hermes
Géométrie discrète en analyse d ’images
J.M Chassery & A. Montanvert - Hermes
113
Programing
Programing -- LibrariesLibraries
CGAL (The Computational Geometry Algorithms Library)
VCG (The Visualization and Computer Graphics Library)
Dan Sunday http://geomalgorithms.com/
Graphics Library)
Geometric-tools (www.geometrictools.com) GLM (OpenGL Mathematics)
Boost (polygon) 114
Organisation des travaux Organisation des travaux
pratiques sous
pratiques sous ScilabScilab
Données :
◦ fichier d’énoncé (sujet_TPx.sci), scripts et exemples.
http://people.mines-paristech.fr/olivier.stab/TP_scilab_MG91
exemples.
Travail :
◦ répondre aux questions dans le fichier, sauver les données de test et les figures d’exemple…
Me rendre :
◦ le travail : le répertoire avec les fichiers à la fin de la séance.
115
TP 0 : introduction à TP 0 : introduction à
Scilab Scilab
Premiers pas
Vecteurs & matrices Graphisme
Graphisme IO fichiers
Scripts & fonctions
Exercices d’application
116
1. Polygones : MyPoly=[1,2;1,3;...;1,2];
◦ Manipulations simples
◦ Fonctions élémentaires :
Aire, boite d’encombrement
SCILAB
Une introduction par la pratique
TP 1 : Boundary Representation
Aire, boite d’encombrement
2. Test de point_dans_poly
◦ PIP_Demo(XYcoord)
◦ [pos]=PIP_PointLocalization(XYcoord, XYP, eps) avec pos =(DANS/HORS/SURA/SURS)
117
Estimation de l’Aire du polygone à partir de point_dans_poly() ?