Aller au contenu

Classement


Contenu populaire

Affichage du contenu avec la meilleure réputation le 08/07/19 dans toutes les zones

  1. 3 points
    Générer des courbes type f(x)=-x² Difficulté: Partie 1: Difficile | Partie 2: Expert Partie 1 - Les bases mathématiques Une équation du second degrés c'est quoi ? En mathématiques, une équation du second degré est une équation polynomiale de degré 2, c'est-à-dire qu'elle peut s'écrire sous la forme: ax² +bx+c (a,b et c sont des paramètres coefficient dont a différent de 0 et x l'inconnue) Les équations du second degrés sont représentées sur un graphique de la manière suivante: y est appelé "équation de courbe" x1 et x2 représente les deux solution en y=0 de l'équation de courbe. Ces deux solutions nous intéresse pour notre skript en question ainsi que notre équation de courbe. Pour plus d'informations, checkez sur internet ou vos cours de mathématiques de la seconde générale au lycée ^^ Wow trop d'info ! on en fait quoi de l'équation de courbe ? Déjà on va devoir réfléchir à une équation quadratique simple. Pour mon exemple on va prendre y = -0.85x²+100 Version difficile: -0.85x² aura donc les limites suivantes (voir les exemple de la courbe bleu du schéma ci-dessus) - Limx->-inf|x<0 -0.85x² = -infini (quand l'inconnu x ira vers -infini alors -0.85x² ira vers un résultat vers - infini) - Limx->0 -0.85x² = 0 - Limx->+inf|x>0 -0.85x² = -infini En français ça donne ceci: Cette courbe vas donc être croissante pour x allant de -infini à 0 puis décroissante pour x allant de 0 à +infini (cependant l'exemple n'est pas valable pour Lim cos(x) ou Lim sin(x) qui tout deux n'ont pas de limite !) Le +100 nous permet de faire en sorte que f(0)=100 c'est à dire que quand x = 0 (en abscisse) alors y = 100 (en ordonnée) Jusque là ce n'est pas trop difficile de faire de la lecture graphique sur sa calculatrice pour constater de -0.85x²+100 fait une courbe croissante au départ avec une approximation d'un x1 vers -11 puis décroissante à partir de x=0 et la présence d'un x2 vers +11. Version résumé: Si vous êtes paumé, c'est normal xD. Je vous ai expliqué des trucs qui ne sont pas facile à comprendre quand on fait pas des mathématiques plus difficile. Au collège on n'apprend pas ça et au lycée on ne voit que les limites vers la terminal scientifique ou technologique. Pas d'inquiétude, retenez juste le fait que grâce à l'équation -0.85x²+100 on aura une courbe qui monte et qui descend avec des coupure vers des x1 = -11 et x2 =+11. Pour inverser le sens du genre, je veux que la courbe descende puis remonte, il faut juste changer le signe du coefficient a) Partie 2 - L'algorithme Quel repère ? Minecraft étant un jeu 3 dimensions, on va avoir besoin d'un repère 3 dimensions (O,x,y,z) (dont O étant une position absolue) Commençons par le plus simple: positionner notre départ et notre "arrivée". notre point de départ représente le x1 de notre courbe et l'arrivée le x2. On commence par quoi ? Voici 3 commandes: # Supprimer toutes les variables command /reset: trigger: delete {CourbeSk::*} # Poser le départ command /start: trigger: set {CourbeSk::PosStart} to player's location set {CourbeSk::StartX} to x-location of player set {CourbeSk::StartZ} to z-location of player message "&7Position de départ: &aX: %{CourbeSk::StartX}% &7- &aZ: %{CourbeSk::StartZ}%" # Poser la potentielle arrivée command /end: trigger: set {CourbeSk::EndX} to x-location of player set {CourbeSk::EndZ} to z-location of player message "&7Position d'arrivée: &aX: %{CourbeSk::EndX}% &7- &aZ: %{CourbeSk::EndZ}%" On sépare bien les variables X et Z pour pouvoir comparer les distances plus tard. Les 3 commandes ci-dessus sont essentielles pour le reste du skript. Le skript ne va pas deviner la position de départ ni d'arrivée. On va faire ensuite l'algo qui va dire dans quels sens sont le départ et l'arrivée. On va détecter si X-Départ est négatif/positif et plus loin/près que de X-Arrivée par rapport au centre de la map. C'est pas simple à comprendre quand on l'explique en français mais regardez le code vous allez comprendre. command /courbe: trigger: # /// Vérification du sens if {CourbeSk::StartX} > 0: if {CourbeSk::EndX} > 0: if {CourbeSk::EndX} > {CourbeSk::StartX}: set {CourbeSk::SigneX} to 1 message "&cX1 &ax> z> &ee>s &31" if {CourbeSk::EndX} < {CourbeSk::StartX}: set {CourbeSk::SigneX} to -1 message "&cX2 &ax> z> &ee<s &3-1" if {CourbeSk::StartX} < 0: if {CourbeSk::EndX} < 0: if {CourbeSk::EndX} > {CourbeSk::StartX}: set {CourbeSk::SigneX} to 1 message "&cX3 &ax< z< &ee>s &31" if {CourbeSk::EndX} < {CourbeSk::StartX}: set {CourbeSk::SigneX} to -1 message "&cX4 &ax< z< &ee<s &3-1" if {CourbeSk::StartX} > 0: if {CourbeSk::EndX} < 0: if {CourbeSk::EndX} > {CourbeSk::StartX}: set {CourbeSk::SigneX} to 1 message "&cX5 &ax> z< &ee>s &31" if {CourbeSk::EndX} < {CourbeSk::StartX}: set {CourbeSk::SigneX} to -1 message "&cX6 &ax> z< &ee<s &3-1" if {CourbeSk::StartX} < 0: if {CourbeSk::EndX} > 0: if {CourbeSk::EndX} > {CourbeSk::StartX}: set {CourbeSk::SigneX} to 1 message "&cX7 &ax< z> &ee>s &31" if {CourbeSk::EndX} < {CourbeSk::StartX}: set {CourbeSk::SigneX} to -1 message "&cX8 &ax< z> &ee<s &3-1" if {CourbeSk::StartZ} > 0: if {CourbeSk::EndZ} > 0: if {CourbeSk::EndZ} > {CourbeSk::StartZ}: set {CourbeSk::SigneZ} to 1 message "&cZ1 &ax> z> &ee>s &31" if {CourbeSk::EndZ} < {CourbeSk::StartZ}: set {CourbeSk::SigneZ} to -1 message "&cZ2 &ax> z> &ee<s &3-1" if {CourbeSk::StartZ} < 0: if {CourbeSk::EndZ} < 0: if {CourbeSk::EndZ} > {CourbeSk::StartZ}: set {CourbeSk::SigneZ} to 1 message "&cZ3 &ax< z< &ee>s &31" if {CourbeSk::EndZ} < {CourbeSk::StartZ}: set {CourbeSk::SigneZ} to -1 message "&cZ4 &ax< z< &ee>s &3-1" if {CourbeSk::StartZ} > 0: if {CourbeSk::EndZ} < 0: if {CourbeSk::EndZ} > {CourbeSk::StartZ}: set {CourbeSk::SigneZ} to 1 message "&cZ5 &ax> z< &ee>s &31" if {CourbeSk::EndZ} < {CourbeSk::StartZ}: set {CourbeSk::SigneZ} to -1 message "&cZ6 &ax> z> &ee<s &3-1" if {CourbeSk::StartZ} < 0: if {CourbeSk::EndZ} > 0: if {CourbeSk::EndZ} > {CourbeSk::StartZ}: set {CourbeSk::SigneZ} to 1 message "&cZ7 &ax< z> &ee>s &31" if {CourbeSk::EndZ} < {CourbeSk::StartZ}: set {CourbeSk::SigneZ} to -1 message "&cZ8 &ax< z> &ee<s &3-1" L'algo ci-dessus ne sert qu'a savoir la direction d'un vecteur entre deux points. Il peut donc vous servir pour autre chose. Notez que cet algo ne fonctionne que pour des vecteurs horizontaux Quand j'envoie des messages type "Z8 x< z> e<s -1" c'est: - Z8: Huitième paramètres de direction - x< : X négatif - z> : Z positif - e<s : E représente l'arrivée et S le départ. Dans ce cas là le Z-Arrivée est plus petit que Z-Départ - -1 : Représente le signe Grace aux 8 possibilités de X et Z on peut savoir parfaitement le sens d'un vecteurs dans un monde minecraft défini par deux points. Bon, on a fait la moitié ! Le plus difficile reste à faire ^^. On va avoir besoin de calculer les distances entre chaque blocs de la courbe. A noter que la valeur "coefficient réducteur de distance" que je vais citer ne fonctionne que pour cette équation et qu'elle a été trouvée par du bidouillage ! # (P1) /// Définition des distances (P1) set {CourbeSk::CompX} to difference between {CourbeSk::StartX} and {CourbeSk::EndX} set {CourbeSk::CompZ} to difference between {CourbeSk::StartZ} and {CourbeSk::EndZ} # (P2) /// Mise du signe + ou - sur les distances (qui sera reset plus tard) (ce passage est inutile xD) (P2) set {CourbeSk::FianlCompX} to {CourbeSk::SigneX}*{CourbeSk::CompX} set {CourbeSk::FianlCompZ} to {CourbeSk::SigneZ}*{CourbeSk::CompZ} message "&a%{CourbeSk::CompX}% - %{CourbeSk::CompZ}% &7| &6%{CourbeSk::FianlCompX}% - %{CourbeSk::FianlCompZ}%" # (P3) /// Tracage de la courbe (P3) set {_loc} to {CourbeSk::PosStart} set {_y} to 0 set {_x} to 0 # (P4) /// Défintion du coef de distance réducteur (+ la distance sera grande, moins ça sera précis) (P4) set {CourbeSk::LocStartX} to abs({CourbeSk::FianlCompX}/34) set {CourbeSk::LocStartZ} to abs({CourbeSk::FianlCompZ}/34) message "&5%{CourbeSk::LocStartX}% &7 &5%{CourbeSk::LocStartZ}%" (P1): Déjà expliqué, on va prendre la distance des deux points (départ et arrivée) que l'on va diviser plus tard pour avoir une distance relative pour chaque blocs de la courbe. (P2): On défini le signe pour savoir dans quelle direction on va suivant les axes X et Z du monde minecraft. Cette valeur est transmise par l'algorithme de détection de direction. Ce passage est aussi inutile car les signes vont être enlevés par la conversion par valeur absolue (P3): Ce sont les variables temporaires qui vont nous servir pour tracer la courbe (P4): On fait une division pour trouver la valeur qui représentera la distances des blocs en X et Z. 34 est la valeur la plus précise que j'ai trouvé pour être le plus précis. Si vous réduisez cette valeur, la courbe dépassera de plus loin que le point d'arrivé et si vous mettez une trop grande valeur, la courbe s’arrêtera avant le point d'arrivée. On a donc un point d'arrivée qui ne sert que de repère d'arrivée de la courbe. En bidouillant cette valeur, vous pourrez potentiellement tomber sur le point d'arriver. Elle est comprise entre 36 et 33 pour l'équation -0.85x²+100. Une fois ça fait, on attaque l'algo de traçage: loop 300 times: add 1 to {_x} add 0.25 to {_y} set {_result} to ((-0.85)*({_y}*{_y}))+100 if {_result} < 1: if {_result} > -300: #Moitié -100 #message "&7f(&e%{_y}%&7)=&a%{_result}%" # /// Message d'affichage de f(x) = 0.85x²+100 if {_y} <= 30: #Moitée 14.75 # \/ Coeficient de hauteur #(PE) set {_loc} to location {_loc}'s x-coordinate+({CourbeSk::SigneX}*{CourbeSk::LocStartX}), {_loc}'s y-coordinate+({_result}/7)+14, {_loc}'s z-coordinate+({CourbeSk::SigneZ}*{CourbeSk::LocStartZ}) set block at {_loc} to redstone block #message "&7f(&e%{_y}%&7) = &a%{_result}%" # /// Message d'affichage de f(x) = 0.85x²+100 wait 1 tick wait 1 tick Ça c'est notre algo pour tracer la courbe. Pour commencer on loop 300 fois pour avoir une plage de valeur y la plus grande sans trop abuser non plus. Pour une assez bonne précision, on met un pas pour la suite {_y} de 0.25 c'est à dire que que loop de cette variable, on ajouter 0,25. On défini {_result} comme le résultat de l'équation de la courbe à la position de {_y} quand {_x} = nloopé. On check si notre valeur est inférieur à 1 puis supérieur à -200 (c'est environ 32 blocs de check ce qui correspond presque au même Y de départ qu'il y aura à l'arrivée) ou -300 pour être large et aller plus bas que le Y de départ de la courbe. On regarde si {_y} ne dépasse pas une limite de 30 (sachant que 30 représente 120 blocs de checks avec un pas de 0.25) (PE) Si on est bien dans toute les conditions réunies, on pose un bloc en X et Z avec les positions défini précédemment puis on place en Y avec la valeur de notre équation + un coefficient de hauteur (surélever les blocs sinon la courbe ce trace par le bas). {CourbeSk::SigneX} et {CourbeSk::SigneZ} sont soit égale 1 ou -1. C'est le coefficient multiplicateur qui sert à donner le signe du coup il a pour valeur 1 ou -1. Voila, on va donc avoir une jolie courbe comme ceci: J’espère que ce tuto va pouvoir vous aider dans des algorithme complexes ou même basique. Perso je vais m'en servir pour AFR-ICBM (skript à venir très prochainement !) Dans tout les cas n'hésitez pas à le partager et à en faire une bonne grosse utilisation pour prouver à vos potes que Skript c'est pas de la merde si on le met entre de bonne mains . J'ai eu pas mal de mal à le faire même si il m'a demandé qu'une soirée pour le réaliser. J'y ai pensé des heures carrés à le faire et le voila enfin ! J’espère surtout vous avoir débloqué sur des trucs ! Je vais le poster comme ressource sur le forum ^^ Bonne continuation à vous tous !
  2. 1 point
    Parfait ! Je ne pensais pas recevoir une réponse aussi express ;D, Je passe en résolu et je te remercie. La solution sera donc de dire a tous les joueurs de passer la taille des HUDs en moyen, car en moyen le scoreboard est petit comme prévu et c'est très agréable, merci infiniment !
  3. 1 point
    Non ce n'est pas possible ^^ avec un plugin/Skript on ne peut que modifier le contenu du scoreboard. Par contre, côté joueur, on peut modifier la taille du scoreboard en modifiant, dans les Paramètres, la taille des HUDs
  4. 1 point
    Maintenant j'attends le tuto pour la fonction partie entière f(x)=a[b(x-h)+k] par exemple pour les escaliers "nuage" dont "b" la longueur des marches serait configurable avec le 1/b biensûr(peut-être ça serait bien pour faire des escaliers fortnite pour le fun?). Non à part rêver gg très beau tuto:)
  5. 1 point
    Tu ne vaut pas un bon prof de maths, mais ça reste absolument ouf ! Au début je ne pensais pas qu'il y avait une utilité mais c'est vrai que c'est une bonne idée d'utilisation. Bref bravo et merci pour ce tuto !
  6. 1 point
    Il faut être malade pour faire ça, mais clairement bravo & merci du partage !
  7. 1 point
    on hunger meter change: set player's food bar to 10
×
×
  • 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.