Aller au contenu
4rno

Sktructure#2 Rotation et symétrie orthogonale

Messages recommandés

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

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.