ThundeRed - ThundeRed.nitroserv.eu
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le deal à ne pas rater :
Funko POP! Jumbo One Piece Kaido Dragon Form : où l’acheter ?
Voir le deal

Fonctions trigonométrique

Aller en bas

Fonctions trigonométrique Empty Fonctions trigonométrique

Message par [GISED] Link Jeu 2 Oct - 12:59

Ici je vais poster des circuits qui effectues des fonctions trigonométriques. J'espère que j'arriverai à toutes les faire ^^.
[GISED] Link
[GISED] Link
Admin

Messages : 13
Date d'inscription : 27/09/2014

Revenir en haut Aller en bas

Fonctions trigonométrique Empty Re: Fonctions trigonométrique

Message par [GISED] Link Jeu 2 Oct - 12:59

Fonctions trigonométrique 586293ThundeRedResearchDepartment2

Calcul du sinus d'un angle
(en combinatoire)

Bonjour à tous, amateur de redstone.

On va voir ici comment faire un circuit qui nous calcule le sinus d'un angle. Vous avez peur ?Pas de soucis, si on commence par le début et qu'on avance gentiment jusqu'à la fin, tout devrait bien se passer.

Donc posons le problème :

Nous donnons une valeur qui correspondra à un angle, et nous recevrons une valeur qui correspondra à son sinus. Alors, plusieurs point à régler d’emblée :


  1. Un angle peut être exprimé en radian ou en degré (ou autre mais pas utile ici),
  2. Le sinus d'un angle est toujours compris entre -1 et 1. Donc des valeurs à virgules, et ça, c'est pas cool.
  3. La précision est quelque chose de très critique, que je vais détailler plus loin


Alors, on va tenter de faciliter la tâche : Et de l'utilisateur, Et de celui qui devra réaliser le circuit, en disant ceci :


  • La valeur d'entrée du circuit sera comprise entre 0 et 90 (donc un angle en degré). Un circuit additionnel devra être utilisé pour gérer les signes et toujours rester dans cette plage de valeur (modulo de la division de l'angle ?).
  • Pour éviter les virgules, notre circuit nous donnera des valeurs comprises entre 0 et 255 (8 bits). Il suffira alors de diviser la valeur obtenue par 255 pour avoir la vraie valeur du sinus.
  • Au sujet de la précision,

Tout est clair ? On peut commencer ? Bien... mais, euh... On va où maintenant avec ça ? Eh bien, on va se diriger vers les entrailles des

pale  pale  pale  pale  pale  Mathématiques  pale  pale  pale  pale  pale

Chapitre 1 : Développement de Taylor  Cool

Je passe, je vais pas faire des maths ici, c'est un terrain trop dangereux.
Voir : développement limité du sinus

Donc, selon ce théorème, on peut écrire le sinus comme suit (faites moi confiance) :
Code:
      1      3
x - ( --- * x  )  // avec x en Radian !!!!
      6

Je m'arrête volontairement à la 3ème puissance, car sinon on va avoir un circuit dont la taille va exploser. Et la précision . . . Très bonne entre 0 et 60°, après, c'est à vous de juger. On en reparlera avec les graphes plus bas.

Chapitre 2 : La formule magique confused

Bien, maintenant que vous savez comment obtenir un sinus (c'est cool nan ?), il faut encore :


  1. Transformer mon angle de degré en radian (l'entrée est en degré, la formule utilise des radians)
  2. Diminuer le nombre de multiplication (parce que chaud quand même...)
  3. Diminuer le nombre de constante
  4. Mettre en forme le résultat pour qu'il soit compris entre 0 et 255
  5. Toujours, toujours, toujours avoir dans la tête cette histoire de précision, c'est très important


La partie qui suit est mise en forme à l'aide de mathematica, pour des questions de lisibilité.
Fonctions trigonométrique 327453Thoriep1
Fonctions trigonométrique 622556Thoriep2
Pour le shift : Diviser par une puissance de 2 c'est comme si on décalait la valeur binaire de log2(x) à droite. Ici pour plus d'info.

Okay, Je sais, la théorie c'est chiant, mais dans notre cas, c'était indispensable. Mais retenez cette formule, et on va voir un graphe pour estimer notre précision :
Fonctions trigonométrique 313317fonctionapprox2
Bien bien... Alors qu'est-ce que cette belle fonction va nous donner ? regardons !
Fonctions trigonométrique 260480Rsumdusinus

C'est quoi ces Floor  Rolling Eyes  

Floor(), cela signifie qu'on a pris uniquement la valeur entière de la division, arrondie vers le bas (Floor ( 1,8 ) = 1 ). Parce que je travaille en 8 bits, il y a des fois des résultats qui dépasse un peu, donc je m'arrange pour prendre les 8 qui m'intéressent et je met à la poubelle tout le reste. Donc, évidemment, ça crée des "saut", c'est ce qu'on voit sur le graphe en haut.

Ici on voit tout de suite la précision... Il est évident qu'on a va prendre C=76. Les testes ont montrés qu'on était encore assez précis.

Et voici les testes :
Fonctions trigonométrique 113398Graphiquederreur
La courbe jaune-orange représente l'erreur du à la résolution de 8 bit (sin(87°) =255 ... donc pas top) .

Et pis dans minecraft gros Malin ?  Mad  

Tu as été patient ? Alors ça donne qqch qui peut ressembler à ça :
Fonctions trigonométrique 44757220141001234453
Une petite vue

Fonctions trigonométrique 28643020141001234549
en bas : l'entrée, et les lampes en haut : le résultat sur 8 bits !

Il suffira de diviser la valeur que vous recevez par 255 et vous aurez votre sinus !
[GISED] Link
[GISED] Link
Admin

Messages : 13
Date d'inscription : 27/09/2014

Revenir en haut Aller en bas

Fonctions trigonométrique Empty Re: Fonctions trigonométrique

Message par [GISED] Link Sam 4 Oct - 21:12

Je dois laisser tombé le cosinus pour l'instant, j'ai trop d'erreur du à l'imprécision. Je regarde encore, je pense avoir une solution plus ou moins viable. Mais cela reste encore à vérifier.
[GISED] Link
[GISED] Link
Admin

Messages : 13
Date d'inscription : 27/09/2014

Revenir en haut Aller en bas

Fonctions trigonométrique Empty Re: Fonctions trigonométrique

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum