Vous êtes sur la page 1sur 39

Dessin Assisté par Ordinateur

Chapitre 2:

Les transformations par le calcul matriciel

Troisième année Licence appliquée en Technologie du


multimédia et du web

Talel BESSAOUDI

2019-2020
WPF : Windows Presentation Foundation

L’espace de noms System.Window.Media.Media3D contient toutes les


classes et toutes les structures qui supportent la représentation 3D.
https://docs.microsoft.com/en-us/dotnet/api/system.windows.media.media3d?view=netframework-4.8

TALEL BESSAOUDI Cours DAO 1


WPF : Windows Presentation Foundation

TALEL BESSAOUDI Cours DAO 1


WPF : Windows Presentation Foundation

 Les fonctionnalités 3D permettent aux développeurs de dessiner, de


transformer et d’animer des graphiques 3D, à la fois en XAML et en
code Csharp.

 Les développeurs peuvent aussi combiner de la 2D et des graphiques


3D pour créer des contrôles riches, pour fournir des illustrations
complexes de données et pour améliorer l’expérience utilisateur de
l’interface d’une application.

 Nous allons voir la définition et l’utilisation pratique des structures


Point3D et Vector3D qui représentent les bases de la construction en
géométrie vectorielle, de objets dans l’espace 3D.

TALEL BESSAOUDI Cours DAO 1


Le repère des coordonnées

TALEL BESSAOUDI Cours DAO 1


La structure Point3D

 La localisation des point qui constituent une figure 3D dans un


espace 3D, passe par l’utilisation des coordonnée 3D. Le
framwork.NET 4.5 propose une structure nommée Point3D.
 Cette structure Point3D représente un point de coordonnées x
(abscisse), y (ordonnée) et z dans l’espace 3D.

 La figure suivante énumère les propriétés et les méthodes de cette


structure.

Les propriétés :
 X qui représente la coordonnée x du Point3D sur l’axe des X.
 Y qui représente la coordonnée y du Point3D sur l’axe des Y.
 Z qui représente la coordonnée z du Point3D sur l’axe des Z.

TALEL BESSAOUDI Cours DAO 1


La structure Point3D

Les principales méthodes :

 Les méthodes Add et Substract pour ajouter et pour soustraire un


vecteur à un point.

 La méthode Offset pour déplacer un point dans l’espace 3D.

 La méthode Multiply pour multiplier les coordonnées d’un point


avec une Matrice de transformation.

 La méthode Parse pour convertir une chaine texte qui contient les
coordonnées d’un point en un objet Point3D.

TALEL BESSAOUDI Cours DAO 1


La structure Point3D

TALEL BESSAOUDI Cours DAO 1


La structure Point3D
Le projet P00_AnnexePointEtVecteur, va permettre de nous familiariser
avec l’utilisation de la structure Point3D au travers des rubriques 1 à 4:

TALEL BESSAOUDI Cours DAO 1


La structure Point3D

TALEL BESSAOUDI Cours DAO 1


La structure Point3D

TALEL BESSAOUDI Cours DAO 1


La structure Point3D

private void UserControl_Loaded(object sender, RoutedEventArgs e) {


Point3D pt_a = new Point3D(2, 1, 3);//
Point3D pt_b = new Point3D(5, 2, 1);
InfosTexte("Point3D pt_a = new Point3D(2, 1, 3)" + RC);
InfosTexte("Point3D pt_b = new Point3D(5, 2, 1)" + RC);
InfosTexte("=> test: pt_a == pt_b" + RC);
if (pt_a == pt_b) {
InfosCalcul("donne true" + RC);
}
else {
InfosCalcul("donne false" + RC);
}

TALEL BESSAOUDI Cours DAO 1


La structure Point3D

InfosTexte("=> test: pt_a.Equals(pt_b)" + RC);


if (pt_a.Equals(pt_b)) {
InfosCalcul("donne true" + RC);
}
else {
InfosCalcul("donne false" + RC);
}
InfosTexte("=> test: pt_a != pt_b" + RC);
if (pt_a != pt_b) {
InfosCalcul("donne true" + RC);
}
else {
InfosCalcul("donne false" + RC);
}
}
TALEL BESSAOUDI Cours DAO 1
La structure Point3D

La méthode Offset permet de déplacer un point dans l’espace. Le point

A(2, 1, 3), nommé pt_a, peut être déplacé d’une valeur de 3 selon X,

d’une valeur de 1 suivant Y et d’une valeur de -2 suivant Z par

pt_a.Offset(3,1,-2). Il possède alors comme nouvelles coordonnées

(5,2,1) comme le visualise la figure suivante:

TALEL BESSAOUDI Cours DAO 1


La structure Point3D

TALEL BESSAOUDI Cours DAO 1


La structure Point3D

TALEL BESSAOUDI Cours DAO 1


La structure Point3D

private void UserControl_Loaded(object sender, RoutedEventArgs e) {


Point3D pt_a = new Point3D(2, 1, 3);
pt_a.Offset(3, 1, -2);
Point3D pt_b = new Point3D(5, 2, 1);
InfosTexte("Point3D pt_a = new Point3D(2, 1, 3)" + RC);
InfosTexte("pt_a.Offset(3, 1, -2)" + RC);
InfosTexte("Point3D pt_b = new Point3D(5, 2, 1)" + RC);
InfosTexte("=> test: pt_a == pt_b" + RC);
if (pt_a == pt_b) {
InfosCalcul("donne true" + RC);
}
else {
InfosCalcul("donne false" + RC);
}
TALEL BESSAOUDI Cours DAO 1
La structure Point3D

InfosTexte("=> test: pt_a.Equals(pt_b)" + RC);


if (pt_a.Equals(pt_b)) {
InfosCalcul("donne true" + RC);
}
else {
InfosCalcul("donne false" + RC);
}
InfosTexte("=> test: pt_a != pt_b" + RC);
if (pt_a != pt_b) {
InfosCalcul("donne true" + RC);
}
else {
InfosCalcul("donne false" + RC);
}
}
TALEL BESSAOUDI Cours DAO 1
La structure Point3D

La méthode statique Point3D.Parse permet de transformer une chaine

au format texte, représentant les coordonnées d’un Point3D, en une

structure Point3D. L’écriture d’une méthode additionnelle EcrireP3D

permettra de bien visualiser les valeurs des propriétés X, Y et Z d’un

Point3D (notamment en différenciant le point décimal de la virgule).

TALEL BESSAOUDI Cours DAO 1


La structure Point3D

TALEL BESSAOUDI Cours DAO 1


La structure Point3D

TALEL BESSAOUDI Cours DAO 1


La structure Point3D

private void UserControl_Loaded(object sender, RoutedEventArgs e) {


Point3D pt_a = Point3D.Parse("4.5,2.5,1.5");
InfosTexte("Point3D pt_a = Point3D.Parse(\"4.5,2.5,1.5\")" + RC);
InfosCalcul("-> pt_a: " + pt_a.ToString() + RC);
InfosTexte("Mise en forme" + RC);
InfosCalcul("-> pt_a" + EcrireP3D(pt_a) + RC);
}
//
private void InfosTexte(string texte) {
x_tbl_infos.Inlines.Add(texte);
}

TALEL BESSAOUDI Cours DAO 1


La structure Point3D

private void InfosCalcul(string texte) {


Run run = new Run(texte);
run.FontStyle = FontStyles.Italic;
run.Foreground = new SolidColorBrush(Colors.Red);
x_tbl_infos.Inlines.Add(run);
}
//
private string EcrireP3D(Point3D pt_3d) {
string etiq = "(";
etiq += pt_3d.X.ToString("#0.00").Replace(',', '.') + ",";
etiq += pt_3d.Y.ToString("#0.00").Replace(',', '.') + ",";
etiq += pt_3d.Z.ToString("#0.00").Replace(',', '.') + ")";
return etiq;
}
}//end class
}
TALEL BESSAOUDI Cours DAO 1
La structure Point3D

La classe Point3DCollection est une collection typée d’objets Poind3D.


Elle est très utile quand l’on souhaite stocker un ensemble de points, de
type Point3D, pour effectuer par exemple une visualisation d’un
ensemble de points à un instant donné.
Pour instancier une nouvelle collection collect, de type
Point3DCollection, on écrira :
Point3DCollection collect = new Point3DCollection().
Et pour ajouter le point A(2, 1, 3) à cette collection, on écrira:
 Soit collect.Add(new Point3D(2,1,3)) pour ajouter un nouveau point A.
 Soit collect.Add(pt_a) si le point A(2, 1, 3) a été instancié par Point3D pt_a =new
Point3D(2, 1, 3).
TALEL BESSAOUDI Cours DAO 1
La structure Point3D

TALEL BESSAOUDI Cours DAO 1


La structure Point3D

TALEL BESSAOUDI Cours DAO 1


La structure Point3D

L’énumération d’une collection Point3DCollection se réalise par l’emploi

d’une boucle foreach qui énumère les objets Point3D conntenus dans la

collection.

TALEL BESSAOUDI Cours DAO 1


La structure Point3D
private void UserControl_Loaded(object sender, RoutedEventArgs e) {
Point3D pt_a = new Point3D(2, 1, 3);
Point3D pt_b = new Point3D(4, 4, 2);
Point3D pt_c = new Point3D(7, 1, 4);
InfosTexte("Point3D pt_a = new Point3D(2, 1, 3)" + RC);
InfosTexte("Point3D pt_b = new Point3D(4, 4, 2)" + RC);
InfosTexte("Point3D pt_c = new Point3D(7, 1, 4)" + RC);
Point3DCollection collect = new Point3DCollection();
collect.Add(pt_a);
collect.Add(pt_b);
collect.Add(pt_c);
InfosTexte("Point3DCollection collect = new Point3DCollection()"
+ RC);
InfosTexte("collect.Add(pt_a)" + RC);
InfosTexte("collect.Add(pt_b)" + RC);
InfosTexte("collect.Add(pt_c)" + RC);
InfosTexte("Test -> énumération de la collection:" + RC);
foreach (Point3D pt in collect) {
string etiq = "-> pt" + EcrireP3D(pt) + RC;
InfosCalcul(etiq);
}
}
TALEL BESSAOUDI Cours DAO 1
La structure Point3D
//
private void InfosTexte(string texte) {
x_tbl_infos.Inlines.Add(texte);
}
//
private void InfosCalcul(string texte) {
Run run = new Run(texte);
run.FontStyle = FontStyles.Italic;
run.Foreground = new SolidColorBrush(Colors.Red);
x_tbl_infos.Inlines.Add(run);
}
//
private string EcrireP3D(Point3D pt_3d) {
string etiq = "(";
etiq += pt_3d.X.ToString("#0.00").Replace(',', '.') + ",";
etiq += pt_3d.Y.ToString("#0.00").Replace(',', '.') + ",";
etiq += pt_3d.Z.ToString("#0.00").Replace(',', '.') + ")";
return etiq;
}
}//end class
}
TALEL BESSAOUDI Cours DAO 1
La structure Vector3D

 Le framwork.NET 4.5 propose une structure nommée Vector3D.


 Cette structure Vectort3D représente un déplacement dans l’espace
3D.
 La figure suivante énumère les propriétés et les méthodes de cette
structure.

Les propriétés :
 X qui représente un déplacement suivant l’axe X du vecteur.
 Y qui représente un déplacement suivant l’axe Y du vecteur.
 Z qui représente un déplacement suivant l’axe Z du vecteur.
 Length qui représente la longueur du vecteur.
 LengthSquared qui représente la longueur au carré du vecteur.

TALEL BESSAOUDI Cours DAO 1


La structure Vector3D

 Le framwork.NET 4.5 propose une structure nommée Vector3D.


 Cette structure Vectort3D représente un déplacement dans l’espace
3D.
 La figure suivante énumère les propriétés et les méthodes de cette
structure.

Les propriétés :
 X qui représente un déplacement suivant l’axe X du vecteur.
 Y qui représente un déplacement suivant l’axe Y du vecteur.
 Z qui représente un déplacement suivant l’axe Z du vecteur.
 Length qui représente la longueur du vecteur.
 LengthSquared qui représente la longueur au carré du vecteur.

TALEL BESSAOUDI Cours DAO 1


La structure Vector3D

TALEL BESSAOUDI Cours DAO 1


La structure Vector3D

 La figure suivante montre un vecteur  𝑣


⃗ dont ses composantes sont
(5, 3, 2). C e vecteur part de l’origine O et va vers le point B(5,3,2).
Un vecteur indique un déplacement par ses composantes.
 Depuis l’origine O, le déplacement selon X est de 5, le déplacement
selon Y est de 3 et le déplacement selon Z est de 2.
 De ce fait, on dit que le point B est l’image du point O par la
translation de vecteur (5, 3, 2).
 Il est important de garder à l’esprit qu’un vecteur est un
déplacement dans l’espace 3D. Il existe une infinité de vecteurs
identiques à celui-ci.
TALEL BESSAOUDI Cours DAO 1
La structure Vector3D

TALEL BESSAOUDI Cours DAO 1


La structure Vector3D

 La structure Vector3D possède un


ensemble de méthodes
d’instances et statiques pour
effectuer différents calculs
vectoriels.
 Il est important de bien connaitre
ces différents mécanismes qui
interviendront plu tard
systématiquement dans la
modélisation. Les rubriques 5 à
15 du notre projet montrent
l’utilisation de la structure
Vector3D dans la pratique.

TALEL BESSAOUDI Cours DAO 1


La structure Vector3D :Déterminer un vecteur à partir de 2 points

TALEL BESSAOUDI Cours DAO 1


La structure Vector3D :Déterminer un vecteur à partir de 2 points

private void UserControl_Loaded(object sender, RoutedEventArgs e) {


Point3D pt_a = new Point3D(2, 1, 3);
Point3D pt_b = new Point3D(5, 3, 2);
InfosTexte("Point3D pt_a = new Point3D(2, 1, 3)" + RC);
InfosTexte("Point3D pt_b = new Point3D(4, 4, 2)" + RC);
Vector3D vecteur_ab = pt_b - pt_a;
InfosTexte("vecteur_ab = pt_b - pt_a" + RC);
InfosCalcul("-> vecteur_ab" + EcrireV3D(vecteur_ab) + RC);
Vector3D vecteur_ba = pt_a - pt_b;
InfosTexte("vecteur_ba = pt_a - pt_b" + RC);
InfosCalcul("-> vecteur_ba" + EcrireV3D(vecteur_ba) + RC);
}

TALEL BESSAOUDI Cours DAO 1


La structure Vector3D :Déterminer un vecteur à partir de 2 points

TALEL BESSAOUDI Cours DAO 1


Vector3D :Additionner un point à un vecteur

TALEL BESSAOUDI Cours DAO 1