4rno 62 Posté : 7 février 2017 Bienvenue dans le 2e épisode de Sktructure ! Si vous n'avez pas suivi le 1e épisode, je vous le conseille fortement, sinon vous ne comprendrez pas grand chose (https://skript-mc.fr/forum/threads/sktructure-1-sauvegarde-de-structure-simple.10021/) ! Cette fois ci, nous allons apprendre à effectuer des rotations (de 90°) et des symétries à nos structures qui ont étés préalablement enregistrées ! Les 2 manipulations sont en réalité relativement similaires. /!\Ce tutoriel est relativement... mathématique, cependant, j'ai essayé de simplifier les explications au maximum -Symétrie orthogonale- Vous devriez, j'espère, l'avoir déjà vu à l'école, la symétrie orthogonale, c'est quand on applique un effet "miroir" sur une figure ou autre. comme ceci: [spoiler=Exemple] Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. Oh la belle symétrie ! Et bien si on applique cela dans un plan, voici ce que l'on obtient: Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. Dans le cas ci dessus, on a effectué une symétrie orthogonale du triangle du dessus par rapport à l'axe X, ce qui a donné le triangle du dessous (appelé image). Ce que l'on peut remarquer, c'est, par exemple, le point A qui se situe en (1, 4) -donc de +1 sur l'axe X et +4 sur l'axe Y- se retrouve dans le triangle image (le résultat de la transformation, ici la symétrie) en (1,-4); on a juste pris l'opposé (on a mis le signe moins (-) devant si vous voulez) de la coordonnée en Y. Et cela est vrai pour tous les points du triangle ! Si on applique une symétrie d'axe Y cette fois, ce n'est plus les coordonnées en Y qui changent, mais celles en X ! Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. [spoiler=Eh ! Pourquoi le point C il est le même pour les 2 triangles ?]C'est tout simplement que C est en (0,1), et -0=0, donc le point C ne bouge effectivement pas ! On sait maintenant ce que l'on doit simplement calculer l'inverse de la coordonnée de l'axe de symétrie. Facile ! On va donc effectuer un "loop {sktruc::save::location::*}:" et y effectuer notre calcul sur l'axe de symétrie choisi. Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. [spoiler=Pourquoi tu fais 0 - x-coordinate ... Tu peux pas simplement faire - x-coordinate ?]Eh bien non, c'est une limitation de Skript (bien que ça revienne au même). Je pense que c'est dû au fait qu'il faut lui donner un "vrai" calcul à effectuer. [spoiler=Et {sktruc::save::blocks::*}, tu l'as oublié non ?]Absolument pas, c'est juste que étant donné que l'on réutilise le même index pour la nouvelle position du bloc, il n'y a pas besoin de l changer ! Et voilà ! C'est tout ! Avouez que ce n'était pas très compliqué ! Passons maintenant à la rotation, vous verrez que c'est un brin plus complexe ! -Rotation- Pour la rotation, au niveau géométrie, voici ce que ça donne, avec une rotation de 90° (dans le sens das aiguilles d'une montre) et de centre (0, 0): Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. On peut constater que pour passer du point A (1, 4), à A'1 (4, -1) -l'apostrophe signifie "image"-, on a échangé les deux coordonnées, et ensuite pris l'opposé pour l'axe Y. Cela est vrai également pour les autres points du triangle. On peut donc dire que qu'un point (X, Y) qui a subit l'effet de notre rotation (centre en (0, 0) et de 90° dans le sens des aiguilles d'une montre) se retrouvera en (Y, -X) ! Dans notre cas, on va faire appel à une fonction, car sinon on devra répéter le même code pour les 3 axes. Voici le code de notre fonction, qui correspond à ce que l'on vient de constater juste au dessus: Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. Alors pour répondre à vos questions, la raison du "loop x times" est que l'on ne va en réalité pas créer une fonction pour chaque rotation de 90° (90, 180, 270), on va donc simplement répéter la rotation de 90° pour obtenir une de 180° ou 270°.Et la raison d’existence de {_coord1temp} et que on réutilise {_coord1}, ça va bugger étant donné qu'on la déjà modifié ! À partir de là, on va utiliser "loop {sktruc::save::location::*}:"; on va ensuite, en fonction de l'axe choisi, utiliser notre fonction et enregistrer le résultat ! [spoiler=Voici le code complet de la rotation] Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. -Résumé- Cette fois ci, nous avons vu comment modifier nos structures avec des rotations et symétries. Ce sont des transformations, cependant, la forme de notre structure reste inchangée. Qui sait, pourront nous un jour faire des réductions, agrandissements, déformations quelconques en Skript ! Suite: Sktructure #3: Génération de structures automatisée 4rno Partager ce message Lien à poster Partager sur d’autres sites
Olyno 196 Répondu : 8 février 2017 Excellent tuto ^^ mais dans ton code en entier, tu as oublier de rajouter le message d'erreur ("else : ") Partager ce message Lien à poster Partager sur d’autres sites