Worldedit
  Worldedit
Le site sur l'éditeur de warcraft 3 !
 
  FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs   medals.php?sid=60dccfc26d2db8f6b57f9fb991ba740bMédailles   S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 
  FAQFAQ World Editor   UploadUploader une map ou une image    UploadAjouter sa map à l'annuaire   UploadConsulter l'annuaire

Remplacer la fonction Cos par une simple lecture de donnée

 
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Aide sur les déclencheurs
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7146
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Rédacteur de tuto #3 (Quantité : 1) Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 18/02/08 17:37    Sujet du message: Remplacer la fonction Cos par une simple lecture de donnée Citer

Je créé ce topic pour éviter de polluer d'avantage la présentation de la map de Zed dont voici le lien :
http://worldedit.free.fr/forum/viewtopic.php?p=16422#16422

Bien que n'étant toujours pas passé du côté obscur des programmeurs, je suis suffisamment exigant, pour optimiser au maximum mes fonctions et utiliser japi Razz

Je rappelles le but de la manoeuvre:
Afin d'éviter d'utiliser la couteuse fonction Cos, je désires remplacer celle ci par une lecture de donnée

Jass:
library Cos initializer Init

globals
    real array COS
    constant real ERR_TRIGO = 0.5
endglobals

function GetCos takes real r returns real
    local integer i=0
   
    loop // si l'angle est négatif on le rend exploitable
    exitwhen r>=0.0
        set r=r+360.0
    endloop
   
    loop // si l'angle est supérieur ou égal à 360° on le rend exploitable
    exitwhen r<360.0
        set r=r+360.0
    endloop
   
   
    loop
    exitwhen false
        if r-ERR_TRIGO*i < ERR_TRIGO then
            return COS[i]
        endif
    set i=i+1
    endloop
   
    return 0.0 // ne sera jamais exécuté, simplement pour ne pas avoir une erreur de compilation
   
endfunction

private function Init takes nothing returns nothing
    local integer inc=R2I(360/ERR_TRIGO)
    local integer i=0
   
    loop
    exitwhen i==inc
        set COS[i]=Cos(i)
    set i=i+1
    endloop
   
endfunction


endlibrary


Remarques :
- C'est juste un code théorique, je n'ai donc pas vérifié si le limit op était atteint
- Je sais que la plupart des fonctions demandes des radians et non des degrés mais c'est pour un exemple plus clair.
Les degrés ca me parle plus que les radians
- Il vaudrait mieux utiliser la méthode plutot que la fonction non native GetCos pour un gain de peformance, avec une macro ou define

Mais cette méthode est d'autant plus couteuse que l'angle et la précision sont grands.

comment faut t'il procéder ?
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Darkfeyt
Floodeur prématuré


Inscrit le: 22 Nov 2007
Messages: 677
Sujets: 27
Spécialité en worldedit: Jamais sortir ses projets ?


MessagePosté le: 18/02/08 17:51    Sujet du message: Citer

Jass:
    loop // si l'angle est négatif on le rend exploitable
    exitwhen r>=0.0
        set r=r+360.0
    endloop
   
    loop // si l'angle est supérieur ou égal à 360° on le rend exploitable
    exitwhen r<360.0
        set r=r+360.0
    endloop


Tes commentaire sont mal fait. mdr
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail MSN Messenger
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7146
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Rédacteur de tuto #3 (Quantité : 1) Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 18/02/08 17:54    Sujet du message: Citer

bah le fonction n'est sensé prendre que les angles de 0 (compris) à 360 ° (exclu)

0 = 360°.

Rajouter ou enlever 360° à un angle ne change pas la valeur réelle de l'angle mais rend celle ci exploitable par la fonction

C'est mieux.mdr ?
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Gevans
Back


Inscrit le: 21 Aoû 2007
Messages: 1930
Sujets: 85

Médailles: 2 (En savoir plus...)
Gevans (Quantité : 1) Rédacteur de tuto #1 (Quantité : 1)

MessagePosté le: 18/02/08 17:55    Sujet du message: Citer

J'ai pas compris ce que tu veux faire exactement :s
_________________
Si vous recherchez quelque chose, il y a de très grandes chances que vous trouviez la réponse ici alors jetez y un oeil.
Topic indispensable
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail Visiter le site web du posteur MSN Messenger
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7146
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Rédacteur de tuto #3 (Quantité : 1) Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 18/02/08 17:59    Sujet du message: Citer

Au lieu d'utiliser
Jass:
Cos(X)

Je veux lire une variable qui me donnera la valeur de Cos(X)
Avec une précision (ici la précision est de 0.5°)

Par exemple pour un angle réel de 4.2 °, l'angle choisi serait 4°

Pourquoi ?
Lire une variable c'est beaucoup plus rapide qu'utiliser une fonction
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Darkfeyt
Floodeur prématuré


Inscrit le: 22 Nov 2007
Messages: 677
Sujets: 27
Spécialité en worldedit: Jamais sortir ses projets ?


MessagePosté le: 18/02/08 18:25    Sujet du message: Citer

Je parlais pas de a quoi sa servait mais qu'il exprimé de mauvaise chose. (enfin a se que je crois)
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail MSN Messenger
 Brissou de Mourièssou
Créateur de sorts, depuis 1936.


Inscrit le: 30 Aoû 2007
Messages: 1511
Sujets: 26
Spécialité en worldedit: Développer des jeux vidéos pour le fun, donc world edit c'est comme faire une addition.
Médailles: 2 (En savoir plus...)
Créateur de héros (Quantité : 1) Concours de sorts amusants (Quantité : 1)

MessagePosté le: 18/02/08 18:42    Sujet du message: Citer

Tu nous fait la même pour Sin mtn xD

Pour rendre exploitable la valeur il faudrai utiliser un modulo, ça serai bien plus simple et propre.

Edit: Ah au fait, en réalité on en a rien à foutre de l'optimisation lol, faut juste coder correctement, on cherche pas en permanence la petit bête. Sauf peut être pour des applications très ciblées pour la science.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur MSN Messenger
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7146
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 18/02/08 19:15    Sujet du message: Citer

Brissou de Mourièssou a écrit:
Tu nous fait la même pour Sin mtn xD

Pour rendre exploitable la valeur il faudrai utiliser un modulo, ça serai bien plus simple et propre.

Edit: Ah au fait, en réalité on en a rien à foutre de l'optimisation lol, faut juste coder correctement, on cherche pas en permanence la petit bête. Sauf peut être pour des applications très ciblées pour la science.


J'estimes coder proprement.
Je ne te demandes pas ton avis, mais une solution.
Si tu dois calculer dans une boucle ou un compteur à faible périodique cela a son importance, que tu le veuille ou non.
Et quand bien même je ne trouverais aucune application à cette méthode je voudrais juste savoir la théorie.

Voilà, si vous voulez encore dire de la <grossièreté>, je vous en serai grés d'aller le faire ailleurs, merci

EDIT : Pour rendre l'angle exploitable cette solution reste la meilleure et pas si difficile à comprendre.
Maintenant il est vrai que si l'on s'amuse à définir un angle de 10 millions de ° cette solution ne marchera pas, mais faut vraiment le vouloir ...
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7146
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 22/02/08 16:04    Sujet du message: Citer

Ayane heard my call
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Gevans
Back


Inscrit le: 21 Aoû 2007
Messages: 1930
Sujets: 85

Médailles: 2 (En savoir plus...)
Gevans (Quantité : 1) Rédacteur de tuto #1 (Quantité : 1)

MessagePosté le: 22/02/08 18:31    Sujet du message: Citer

J'ai toujours pas compris en fait Sad tu veux calculer le cosinus d'un angle sans utiliser la fonction cos ?
Dans ce cas tu peux dire que cos(x) est environ égal à la somme de (-1)^n*x^(2n)/(2n)!
_________________
Si vous recherchez quelque chose, il y a de très grandes chances que vous trouviez la réponse ici alors jetez y un oeil.
Topic indispensable
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail Visiter le site web du posteur MSN Messenger
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7146
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Rédacteur de tuto #3 (Quantité : 1) Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 22/02/08 19:43    Sujet du message: Citer

General Vans a écrit:
J'ai toujours pas compris en fait Sad tu veux calculer le cosinus d'un angle sans utiliser la fonction cos ?
Dans ce cas tu peux dire que cos(x) est environ égal à la somme de (-1)^n*x^(2n)/(2n)!

xD

Nan t'as pas compris mais Ayane oui puisque c'est elle qui m'en a parlé Very Happy
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Ayane
Bot administrateur


Inscrit le: 17 Sep 2007
Messages: 2012
Sujets: 49

Médailles: 2 (En savoir plus...)
Rédacteur de tuto #1 (Quantité : 1) Ayane (Quantité : 1)

MessagePosté le: 04/03/08 16:33    Sujet du message: Citer

Généralement cela ressemble plutôt à cela:

Jass:

globals
   real array cos
   real cos_accuracy
endglobals

function cos_init takes real accuracy returns nothing
   local integer i = R2I(2 * bj_PI / accuracy)
   set cos_accuracy = accuracy
   loop
      exitwhen i < 0
      set cos[i] = Cos(i * accuracy)
      set i = i - 1
   endloop
endfunction

function CosEx takes real alpha returns real
   return cos[R2I(alpha / cos_accuracy)]
endfunction


Ici la fonction Cos a donc été remplacé par la fonction R2I, ce qui pourrait être amélioré en passant en paramètre un entier.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7146
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Rédacteur de tuto #3 (Quantité : 1) Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 16/03/08 17:43    Sujet du message: Citer

C'est environ 1/3 plus lent que d'utiliser la fonction Cos directement, et non je n'ai pas fait l'erreur d'utiliser la fonction CosEx mais bien directement la variable cos.
J'obtient une vitesse similaire que la fonction Cos en utilisant des entiers, mais une précision dans l'angle de 1 radian c'est pas top Razz, te de toute façon les angles sont des réels donc impossible de se passer de la fonction R2I ...

Bref je vais utiliser la fonction Cos comme tout le monde
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Ayane
Bot administrateur


Inscrit le: 17 Sep 2007
Messages: 2012
Sujets: 49

Médailles: 2 (En savoir plus...)
Rédacteur de tuto #1 (Quantité : 1) Ayane (Quantité : 1)

MessagePosté le: 17/03/08 10:47    Sujet du message: Citer

Les angles ne sont pas forcément des réels, les degrés sont par exemple purement arbitraire, ils ne nous conviennent pas car ce n'est pas assez précis sur 360, mais sur 1000000 par exemple c'est bien plus précis.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7146
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 17/03/08 19:08    Sujet du message: Citer

Ayane a écrit:
Les angles ne sont pas forcément des réels, les degrés sont par exemple purement arbitraire, ils ne nous conviennent pas car ce n'est pas assez précis sur 360, mais sur 1000000 par exemple c'est bien plus précis.

Joue pas sur les mots les fonctions jass qui renvoient des angles utilisent des réels.
Et ils sont précis à trois chiffres derrière la virgule
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Aide sur les déclencheurs Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1
La question posée dans ce topic a été résolue !

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com