Discover millions of ebooks, audiobooks, and so much more with a free trial

Only $11.99/month after trial. Cancel anytime.

Formation 3D par la pratique avec C#5 et WPF: Modeliser des molecules
Formation 3D par la pratique avec C#5 et WPF: Modeliser des molecules
Formation 3D par la pratique avec C#5 et WPF: Modeliser des molecules
Ebook514 pages7 hours

Formation 3D par la pratique avec C#5 et WPF: Modeliser des molecules

Rating: 0 out of 5 stars

()

Read preview

About this ebook

Ce livre s’adresse au développeur et au programmeur, débutant et confirmé, qui souhaite découvrir et approfondir la modélisation 3D au travers de la programmation de la représentation des molécules de chimie dans un environnement complet 3D (avec C#, XAML et WPF).
L’étape 1 traite de la notion de point et de vecteur au travers de la géométrie vectorielle. L’étape 2 traite de la programmation des transformations par le calcul matriciel (translation, rotation, mise à l’échelle, cisaillement). L’étape 3 consiste à réaliser une scène 3D complète avec une surface triangulaire texturée, un éclairage, et une caméra perpective dotée de mouvements. L’étape 4 consiste à modéliser un cube générique avec des faces texturées, un repère de coordonnées 3D et un plan de travail pour matérialiser le sol. L’étape 5 consiste à modéliser une sphère dotée d’une surface texturée et sous l’influence d’un éclairage directionnel. L’étape 6 consiste à modéliser un ensemble de molécules avec des atomes et des liaisons covalentes, en utilisant des structures tétraédriques et bipyramidales à base triangulaire. L’étape 7 consiste à réaliser une application entièrement tactile, pour une tablette Asus équipée de Windows 8, dans laquelle on visualise une molécule de cubane.
LanguageFrançais
Release dateJul 18, 2014
ISBN9782322025480
Formation 3D par la pratique avec C#5 et WPF: Modeliser des molecules
Author

Patrice Rey

Patrice REY est informaticien et formateur indépendant, diplômé en informatique et certifié Microsoft MCTS. Passionné par les technologies Microsoft Silverlight, WPF et DirectX, spécialiste du langage C#, adepte des langages C++, Java et Python, programmeur passionné des API 3D, il vous fait partager sa passion pour le développement et la programmation des applications au travers de cet ouvrage.

Read more from Patrice Rey

Related to Formation 3D par la pratique avec C#5 et WPF

Related ebooks

Related articles

Reviews for Formation 3D par la pratique avec C#5 et WPF

Rating: 0 out of 5 stars
0 ratings

0 ratings0 reviews

What did you think?

Tap to rate

Review must be at least 10 words

    Book preview

    Formation 3D par la pratique avec C#5 et WPF - Patrice Rey

    tous.

    1

    Point et vecteur dans l’espace 3D

    L’espace de noms System.Windows.Media.Media3D (assembly PresentationCore.dll) contient toutes les classes et toutes les structures qui supportent la représentation 3D. 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 procédural. 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.

    Dans cette première étape, 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, des objets dans l’espace 3D.

    1 - Le repère des coordonnées

    Dans un système à 3 dimensions, un point est représenté par ses coordonnées selon les 3 axes X, Y et Z. Dans le repère 3D utilisé par WPF, depuis l’origine O du repère, l’axe X des abscisses positives part vers la droite, l’axe Y des ordonnées positives part vers le haut, et l’axe Z des coordonnées positives part vers l’extérieur et devant.

    Ces 3 axes peuvent être représentés au moyen des doigts d’une main: le pouce représente l’axe des X, l’index représente l’axe des Y et le majeur représente l’axe des Z. L’axe des X est généralement dirigé vers la droite et l’axe des Y est généralement dirigé vers le haut. Pour la direction de l’axe des Z, WPF utilise le système «main droite» (figure 1.1) dans lequel l’axe des Z est dirigé vers l’avant (il sort de l’écran).

    FIGURE 1.1

    2 - La structure Point3D

    La localisation des points qui constituent une figure 3D dans un espace 3D, passe par l’utilisation des coordonnées 3D. Le framework .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 1.2 énumère les propriétés et les méthodes de cette structure. Cette structure Point3D expose les propriétés suivantes:

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

    Cette structure Point3D expose principalement les méthodes suivantes:

    •   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 chaîne texte qui contient les coordonnées d’un point en un objet Point3D.

    FIGURE 1.2

    Le projet PointEtVecteurEn3d.sln (figure 1.3), qui se trouve dans le dossier intitulé 01-VS2013-PointEtVecteur, va permettre de nous familiariser avec l’utilisation de la structure Point3D au travers des rubriques 1 à 4.

    FIGURE 1.3

    Un point A (figure 1.4) de coordonnées (2,1,3), intitulé pt_a et de type Point3D, est instancié en code procédural par Point3D pt_a = new Point3D(2,1,3). Les propriétés X, Y et Z de la structure, qui représentent les coordonnées selon les axes, sont de type double.

    FIGURE 1.4

    La rubrique 1 du sélecteur x_cbx_select permet d’instancier 2 structures Point3D et permet de tester leur égalité par la méthode héritée Equals ou bien par la surcharge de l’opérateur «==». L’inégalité entre 2 structures Point3D est testée par la surcharge de l’opérateur «!=». La figure 1.5 affiche les résultats obtenus.

    FIGURE 1.5

    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 1.6. La figure 1.7 montre les résultats obtenus après le déplacement et après les tests d’égalité et d’inégalité.

    FIGURE 1.7

    FIGURE 1.6

    La méthode statique Point3D.Parse permet de transformer une chaîne au format texte, représentant les coordonnées d’un Point3D, en une structure Point3D (figure 1.8). 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). La figure 1.9 montre les résultats obtenus pour le passage d’une chaîne texte représentant un point en un objet Point3D.

    FIGURE 1.8

    FIGURE 1.9

    La classe Point3DCollection est une collection typée d’objets Point3D. 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).

    FIGURE 1.10

    L’énumération d’une collection Point3DCollection se réalise facilement par l’emploi d’une boucle foreach qui énumère les objets Point3D contenus dans la collection. Sur la figure 1.10, on instancie une collection de points et on y ajoute les points A(2,1,3), B(4,4,2) et C(7,1,4). La figure 1.11 montre le résultat obtenu lors de l’énumération des points dans la collection.

    FIGURE 1.11

    3 - La notion de vecteur

    René Descartes (1596-1650) est l’un des plus grands savants et philosophes de son temps, fondateur de la géométrie analytique, de l’application de l’algèbre à la géométrie, et d’une approche de la connaissance fondée sur la méthode rationnelle. Avec les encouragements de ses amis scientifiques (Mersenne, Beeckman, Mydorge, Hortensius, Huygens, van Schooten), René Descartes publia son monumental traité «Discours de la Méthode, pour bien conduire sa raison et chercher la vérité dans les sciences», fondement de la démarche scientifique moderne (figure 1.12). Cet ouvrage comporte trois appendices qui illustrent l’application de sa méthode, ce sont La Dioptrique, Les Météores et La Géométrie. Ce traité fut publié à Leyden en 1637. C’est dans son traité de géométrie que Descartes fit un apport décisif : il posa le premier les principes de l’invariance, où fut soulevée pour la première fois la question de référentiel pour observer et décrire les phénomènes. Pour René Descartes, l’existence même d’un raisonnement mathématique et d’une façon ordonnée de penser, prouve que l’homme, en suivant méthodiquement certaines règles, peut se convaincre d’avoir atteint la vérité. L’ordre qu’il établit en géométrie des courbes repose sur l’emploi des coordonnées.

    FIGURE 1.12

    La géométrie analytique est un outil nouveau qui permet de résoudre par le calcul un problème de géométrie. Il est forgé par Descartes alors que celui-ci cherche à résoudre un problème posé par Pappus à la fin du IIIe siècle et non résolu jusqu’alors. Il apporte l’idée de remplacer chaque point par deux nombres qui seront ses coordonnées afin de résoudre par le calcul un problème de géométrie.

    Par définition (figure 1.13), un vecteur est un objet mathématique, représenté par deux points A et B, et qui possède 3 caractéristiques:

    •   une direction: c’est la droite (AB)

    •   un sens: celui qui va de A vers B

    •   une longueur: c’est la distance entre A et B

    FIGURE 1.13

    En mathématiques (figure 1.14), les mots «sens» et «direction» ne sont pas synonymes. Une direction est définie à l’aide d’une droite. Des droites parallèles ont la même direction. Un sens n’est défini qu’associé à une direction. Pour une direction il n’y a que deux sens possibles.

    FIGURE 1.14

    D’un point de vue modélisation des données (figure 1.15), un vecteur s’apparente à un déplacement selon l’axe des abscisses et à un déplacement selon l’axe des ordonnées. Un vecteur dans l’espace 2D sera matérialisé par ces déplacements, par une valeur réelle x (pour les abscisses) et par une valeur réelle y pour les ordonnées. La connaissance de ces 2 valeurs suffit pour matérialiser n’importe quel vecteur. Et à partir de ces 2 valeurs, nous pouvons calculer facilement la longueur du vecteur. Il en est de même dans l’espace 3D en rajoutant une coordonnée z.

    FIGURE 1.15

    4 - La structure Vector3D

    Le framework .NET 4.5 possède une structure Vector3D qui gère l’utilisation et la manipulation des vecteurs dans l’espace 3D.

    Un vecteur dans l’espace 3D est représenté par une structure Vector3D (la figure 1.16 affiche le détail de cette structure). Un vecteur dans l’espace 3D, de type Vector3D, par définition, représente un déplacement dans l’espace 3D. Cette structure expose les propriétés suivantes:

    •   X qui représente le déplacement suivant l’axe X du vecteur.

    •   Y qui représente le déplacement suivant l’axe Y du vecteur.

    •   Z qui représente le 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.

    La dont ses composantes sont (5,3,2). Ce 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.

    FIGURE 1.16

    FIGURE 1.17

    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 connaître ces différents mécanismes qui interviendront plus tard systématiquement dans la modélisation. Les rubriques 5 à 15 du projet PointEtVecteurEn3d.sln montrent l’utilisation de la structure Vector3D dans la pratique.

    4.1 - Déterminer un vecteur à partir de 2 points

    Pour trouver les coordonnées d’un vecteur connaissant un point A et un point B, il faut utiliser une surcharge de l’opérateur «-» de Point3D qui retourne un vecteur, de type Vector3D, quand on soustrait un point à un autre point (par exemple avec l’écriture vect = pt_a - pt_b ou bien avec l’écriture vect = pt_b - pt_a).

    Par exemple, sur la (3,2,-1) permet de passer de A vers B. Trouver le vecteur résultant entre deux points c’est trouver un vecteur orienté. Si vecteur = point B - point A, cela correspond au vecteur dont le point de départ est le point A et le point d’arrivée est le point B, donc un vecteur orienté de A vers B. Si vecteur = point A - point B, cela correspond au vecteur dont le point de départ est le point B et le point d’arrivée est le point A, donc un vecteur orienté de B vers A.

    (-3,-2,1) permet de passer de B vers A. La figure 1.19 montre le résultat obtenu pour déterminer un vecteur à partir de deux points.

    FIGURE 1.18

    FIGURE 1.19

    4.2 - Additionner un point à un vecteur

    La méthode statique Point3D.Add . La figure 1.20 schématise géométriquement le résultat recherché.

    La structure Vector3D possède une surcharge de l’opérateur «+», ce qui permet d’écrire directement l’expression pt_b = pt_a + vecteur avec pt_a et pt_b qui sont du type Point3D et vecteur qui est du type Vector3D. A noter qu’une deuxième surcharge de l’opérateur permet d’écrire aussi pt_b = vecteur + pt_a. Cependant on utilise plutôt la première surcharge qui est plus intuitive.

    Soient un point A, de type Point3D, de type Vector3D, de coordonnées (3,2,-1), le point B recherché possède les coordonnées (5,3,2). La figure 1.21 illustre le résultat attendu.

    FIGURE 1.20

    FIGURE 1.21

    4.3 - Soustraire un vecteur à un point

    , on obtient un point B. La figure 1.22 schématise géométriquement le résultat recherché. La méthode statique Point3D. Substract à A donne le point B aux coordonnées (2,1,3). Il existe ici aussi une surcharge de l’opérateur «-» pour soustraire directement un vecteur à un point par l’écriture pt_b = pt_a - vecteur (avec pt_a et pt_b de type Point3D, et vecteur de type Vector3D). La figure 1.23 montre le résultat obtenu.

    FIGURE 1.22

    FIGURE 1.23

    4.4 - L’addition vectorielle

    (figure 1.24). Cette somme vectorielle s’effectue grâce à la surcharge de l’opérateur «+» de Vector3D, ou bien avec la méthode statique Vector3D.Add. La figure 1.25 montre le résultat obtenu.

    FIGURE 1.24

    FIGURE 1.25

    4.5 - La soustraction vectorielle

    .

    La méthode statique Vector3D.Substract permet d’obtenir le vecteur résultant d’une soustraction vectorielle. Ce résultat peut être obtenu aussi grâce à la surcharge de l’opérateur «-» de Vector3D(-1,3,0) comme le montre la figure 1.26. La figure 1.27 montre le résultat obtenu par le calcul.

    FIGURE 1.26

    FIGURE 1.27

    4.6 - Multiplier un vecteur par un scalaire

    La multiplication vectorielle (figure 1.28) consiste à multiplier un vecteur par un scalaire (une valeur de type double). Le vecteur se trouve alors augmenté en longueur mais sa direction reste la même. Son sens peut être opposé si le scalaire multiplicateur est négatif. La surcharge de l’opérateur «*» permet de multiplier un vecteur par une valeur de type double. L’autre façon de procéder est d’utiliser la méthode statique Vector3D.Multiply, mais sa longueur est double.

    FIGURE 1.28

    La figure 1.29 montre le résultat obtenu par l’emploi de la méthode statique Vector3D. Multiply et l’emploi de la surcharge de l’opérateur «*».

    FIGURE 1.29

    4.7 - Trouver la longueur d’un vecteur

    La longueur d’un vecteur est obtenue par la propriété Length et la longueur élevée au carré est obtenue par la propriété LengthSquared. La (5,3,3) dont la propriété Length retourne la valeur 6.55 et la propriété LengthSquared retourne la valeur 43. La figure 1.31 montre le résultat obtenu par calcul.

    FIGURE 1.30

    Enjoying the preview?
    Page 1 of 1