mercredi 1 avril 2020

Boulier Elliptique compatible Blockchain

Ce nouveau post va nous permettre de réaliser une boulier elliptique. Nous verrons en conclusion du post tous les intérêts dans le domaine des blockchain qui font un usage immodéré de la cryptographie elliptique.

Revenons un peu sur les courbes elliptiques. Comme l'explique Wikipédia ce sont des courbes de la forme Y^2=aX^3+bX+c  soit Y = RacineCarré  (aX^3+bX+c) pour une demi-courbe.


ce qui en BlockScad se traduit par le bloc suivant (pour les nouveaux sur ce site, voir les étapes précédentes sur BlockScad) avec des paramètres soigneusement choisi. Nous reviendrons sur le choix en fin de post.

Avec ce block nous allons construire une première courbe.


la fonction Kx est une boucle entre -2.34862 (la valeur de X pour que Y soit nul et 4 pour ne pas faire un boulier trop grand.

Sur le graphique, l'axe rouge est le X et l'axe vert est le Y.

A ce stade, réalisons la courbe complète en utilisant une symétrie par rapport au plan XZ


Ne vous inquiétez pas, la taille des branches est la même : c'est simplement l'affichage 3D qui donne une impression de dissymétrie.

Maintenant, nous voulons ajouter un objet qui puisse facilement glisser sur la courbe elliptique pour agir comme tangente à la courbe.


Nous allons décrire dans le détail les différentes étapes.


En premier temps, un anneau torique (en bleu) qui devra coulisser sur la courbe. Le programme ne pose aucun souci. Je vous passe les détails sur le choix des mesures : un peu de calcul très simple et surtout beaucoup d'essais et de vérification sous plusieurs angles du dessin 3D.

En jaune, un cylindre creusé avec seulement 5 faces et en rouge l'axe qui rentre dans le cylindre.

Maintenant il s'agit de :

  1. positionner le tore sur la courbe
  2. d'orienter le tore pour qu'il soit bien perpendiculaire à la courbe.

Pour positionner notre axe sur la courbe, nous allons utiliser la fonction qui nous donne la courbe. Regardez le programme ci-dessous.



Nous avons seulement ajouter une fonction TRANSLATION  avec X et Y qui est le résultat de la courbe elliptique. Le paramètre "bool" est simplement à 1 ou -1 suivant que l'on veut un place sur les Y positifs (demi-courbe du haut) ou sur les Y négatifs (demi-courbe du bas).

En complément, nous avons mis ce petit bout de code sous forme d'un module "tangente" pour facilement passer les paramètres.

Mais, comme nous pouvons le constater sur la représentation 3D, ce nouvel objet interfère avec la courbe. Il est donc temps de faire la deuxième partie du programme, celle qui va orienter l'axe rouge comme tangente à la courbe.

Au passage, remarquons que le tore bleu et le cylindre jaune seront donc à 90° de la tangente.


Entouré d'un liseré jaune, nous avons ajouté une rotation verticale, c'est à dire suivant l'axe des Z.

Pour ce faire nous utilisons les propriétés suivantes des mathématiques du secondaire (je sais la seconde c'est loin mais ce n'est pas pour rien que l'on devait apprendre ces leçons ;-) 

  1. la tangente de l'angle à un courbe est donné par sa dérivée
  2. l'angle est donc donné par la fonction inverse de la tangente, c'est-à-dire ArcTangente (ou ATAN en BlocScad)
  3. et comme nous l'avons remarqué précédemment, il faut rajouter 90 pour rester orthogonal à la tangente
  4. et toujours notre variable "bool" pour choisir si c'est en haut ou en bas sur la courbe
Donc la formule du haut reste simple à comprendre. Il nous reste à calculer la dérivée de la courbe elliptique.
C'est le module en dessous. Petit rappel nécessaire sur les dérivées de RacineCarré ? Je vous ai trouvé un site tout à fait adapté. https://homeomath2.imingo.net/derirac.htm

et voici donc notre belle courbe avec 2 droites tangentes.


le reste du projet est un peu de cosmétique pour pouvoir en faire une impression 3D.

On ajoute un cadre pour mieux tenir la courbe et aussi pour la prochaine étape.


Pas de souci particulier pour ce programme. Les bonnes valeurs par essais successifs (comme d'hab !)

Maintenant, rajoutons une réglette verticale.


Bien qu'un peu long, le module est très simple. Il s'agit d'une réglette qui peut coulisser sur le cadre (axe des X) et qui représente une vertical sur l'axe des Y.

A partir de maintenant, nous avons tous les éléments pour graduer notre règle. Si nous partons du principe que la tangente est au point (1) le point (2) est représenté sur la figure.



d'où l'intérêt de réaliser la réglette.

le trois se déduit de l'intersection entre le 1 et le 2. 




Concernant l'impression 3D, il faut faire cela en deux fois. la courbe et le cadre puis les axes. Même si en dessous vous avez une simulation de la règle complète.




Revenons, un peu sur la courbe elliptique. Voici ce que cela donne sous GEOGEBRA.


Pour bien vous convaincre que le choix des paramètres est très important, voici un nouveau dessin avec des paramètres un peu changés.



et c'est ainsi que nous découvrons que nous aurions pu tomber dans un poisson d'avril ... uniquement si les paramètres initiaux avaient été mal choisis ;-)

Et pour tous ceux qui ont eu la patience de lire jusqu'au bout, voici le bidule réalisé avec SCULPTEO.


Il y a surement quelques optimisations à faire d'autant plus que cela n'a vraiment rien d'un boulier ;-) 

Aucun commentaire: