Enigma...

Tout ce qui concerne l'utilisation ou l'installation de LaTeX.

Modérateur: gdm_tex

Règles du forum
Merci d'éviter le style SMS dans vos messages et de penser à utiliser la fonction Recherche avant de poster un message. Pour joindre des fichiers à vos messages, consulter ce sujet.
> Penser à utiliser les balises Code pour poster du code.

Re: Enigma...

Messagepar rebouxo » Samedi 29 Avril 2017, 22:22

J'oubliais : en plus mathematex comprend le code asymptote !

2dbd15b6c98829f86492e6d4c823c18b.png

Code: Tout sélectionner
settings.outformat="pdf" ;
import graph ;
import math ;
import geometry ;
usepackage("calrsfs") ;
import interpolate ;
import animate ;
unitsize(1cm,1cm) ;


real R_e = 5 ;
real R_m = 4.25 ;
real R_i = 3.5 ;

real angle = 360/26 ;


point pO=(0,0) ;
point pE=(R_e,0) ;
point pM=(R_m,0) ;
point pI=(R_i,0) ;
point pME = rotate(angle/2)*pM ;
point pMI = rotate(angle/2)*pI ;


path trait = pI--pM--pE ;

circle C_e = circle(pO,R_e) ;
circle C_m = circle(pO,R_m) ;
circle C_i= circle(pO,R_i) ;


string[] alpha = {
"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"} ;

string[] alphaD = {
"P","R","A","N","C","B","E","Q","G","F","Z","L","H","K","S","M","X","J","O","T","Y","I","U","V","W","D"} ;

draw(C_e^^C_m^^C_i,blue) ;

for(int cpt = 0 ; cpt < 26 ; ++cpt )
{
draw(rotate(angle*cpt)*trait,blue) ;
label(alpha[cpt],rotate(angle*(cpt))*pME,dir(angle*(cpt+0.5))) ;
label(alphaD[cpt],rotate(angle*(cpt))*pMI,dir(angle*(cpt+0.5))) ;
}


Il suffit de cliquer sur l'image pour avoir le code.

Je n'ai pas regarde la taille des cercles, mais pour un premier jet, c'est pas mal.
Olivier
A line is a point that went for a walk. Paul Klee
Par solidarité, pas de MP
rebouxo
Modérateur
 
Messages: 6729
Inscription: Mercredi 15 Février 2006, 13:18
Localisation: le havre
Statut actuel: Actif et salarié | Enseignant

Publicité

Re: Enigma...

Messagepar marco56 » Dimanche 30 Avril 2017, 10:48

Cela donne envie de s'y mettre.
Par contre, entre Maple, Scilab, Python + pstricks et Tikz, c'est déjà compliqué de ne pas tout mélanger. Avec Asymptote en plus...
marco56
Giga-utilisateur
 
Messages: 663
Inscription: Jeudi 25 Novembre 2010, 22:10
Statut actuel: Actif et salarié | Enseignant

Re: Enigma...

Messagepar loicwood » Dimanche 30 Avril 2017, 11:14

C'est possible également en HTML...
Code: Tout sélectionner
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" media="screen" href="styles.css" type="text/css"/>
<title>Essai 1</title>

<!-- canvas -->
<canvas id="dessin" width="1000" height="1000">
Texte pour les navigateurs qui ne supportent pas canvas
</canvas>

<script>

var moncanvas = document.getElementById('dessin');
var ctx = moncanvas.getContext('2d');

ctx.linewidth = 2 ;

var rayon_0 = 150 ;
var rayon_1 = 120 ;
var rayon_2 = 90 ;

var abs_centre = 400 ;
var ord_centre = 400 ;

var angle = 0 ;

var offset = 14 ;

var rotor_1 = ["E", "K", "M", "F", "L", "G", "D", "Q", "V", "Z", "N", "T", "O", "W", "Y", "H", "X", "U", "S", "P", "A", "I", "B", "R", "C", "J"] ;

var alphabet = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"] ;

// rotor extérieur
ctx.beginPath() ;
ctx.fillStyle = "#BBD9EE" ;
ctx.arc(abs_centre, ord_centre, rayon_0,0, Math.PI*2, true) ;
ctx.fill();
ctx.stroke() ;
// rotor intérieur
ctx.beginPath() ;
ctx.fillStyle = "steelblue" ;
ctx.arc(abs_centre,ord_centre,rayon_1,0, Math.PI*2, true);
ctx.fill();
ctx.stroke();
ctx.beginPath() ;
for (var i = 0 ; i < 26 ; i++)
{
   ctx.moveTo(abs_centre + rayon_2 * Math.cos((360/26*i + offset)/180*Math.PI + angle), ord_centre + rayon_2 * Math.sin((360/26*i + offset)/180*Math.PI + angle)) ;
   ctx.lineTo(abs_centre + rayon_0 * Math.cos((360/26*i + offset)/180*Math.PI + angle), ord_centre + rayon_0 * Math.sin((360/26*i + offset)/180*Math.PI + angle)) ;
}
ctx.stroke();
ctx.beginPath() ;
ctx.fillStyle = "white" ;
ctx.arc(abs_centre,ord_centre,rayon_2,0, Math.PI*2, true);
ctx.fill();
ctx.stroke();
//affichage des lettres
ctx.beginPath() ;
ctx.font = "12pt Arial" ;
ctx.textAlign = 'center' ;
ctx.textBaseline = "middle" ;
ctx.fillStyle = "black" ;
ctx.translate(abs_centre, ord_centre) ;
for (var i = 0 ; i < 26 ; i++)
{
   ctx.save() ;
   ctx.rotate(-2*Math.PI/26*i) ;
   ctx.fillText(alphabet[i], 0, -(rayon_0+rayon_1)/2 ) ;
   ctx.fillText(rotor_1[i],  0, -(rayon_2+rayon_1)/2) ;
   ctx.restore();
}
ctx.stroke();


</script>
</body>
</html>



On doit pouvoir animer le rotor intérieur, mais je manque de temps... Il est également possible d'afficher un tableau avec la correspondance des lettres.
loicwood
Kilo-utilisateur
 
Messages: 102
Inscription: Dimanche 23 Octobre 2011, 10:24
Localisation: Souppes sur Loing
Statut actuel: Actif et salarié | Enseignant

Re: Enigma...

Messagepar rebouxo » Dimanche 30 Avril 2017, 12:33

marco56 a écrit:Cela donne envie de s'y mettre.
Par contre, entre Maple, Scilab, Python + pstricks et Tikz, c'est déjà compliqué de ne pas tout mélanger. Avec Asymptote en plus...


Ben, en faite, j'ai complètement laissé tomber pstricks. Je voulais passer à pdflatex (ce n'est pas rédhibitoire), je voulais faire de la 3D. Ce qui fait que je n'utilise plus pstricks. La plus part du temps j'utilise asymptote, mais dès que j'ai besoin de faire du graphisme typographique (fond, bouton, mise en forme) je fais du TiKz, qui reprend une partie de la syntaxe d'asymptote (ou l'inverse...).

Je trouve que la 2d est assez simple, en tous les cas pour des courbes, stat/proba, géométrie euclidienne, le code est bien plus compact que l'équivalent psticks. Les boucles et les calculs sont plus facilement accessibles. Après 1 an et demi de pratique je suis assez productif. La 3D c'est déroutant au début, mais très intéressant : avoir la possibilité dans un pdf de regarder un objet 3D sur toutes les coutures, est vraiment intéressant. Le top serait d'avoir une production de fichier compréhensible par les imprimantes 3D. Il manque encore des trucs (l'intersection de chemin et de surface, voir de surface et de surface).

Il manque, la possibilité d'interagir avec la figure, c'est pour cela que je regarde du côté de processing. Parce que les animations dessins animés c'est pas mal, parfois, on aimerait faire des choses plus souples.

Bizarrement je ne mélange pas trop avec python. Et ni avec mapple, ni avec scilab, j'uitiliserais plutôt les analogues python (ou sagemath).

Olivier
A line is a point that went for a walk. Paul Klee
Par solidarité, pas de MP
rebouxo
Modérateur
 
Messages: 6729
Inscription: Mercredi 15 Février 2006, 13:18
Localisation: le havre
Statut actuel: Actif et salarié | Enseignant

Re: Enigma...

Messagepar OG » Dimanche 30 Avril 2017, 14:06

rebouxo a écrit: Il manque encore des trucs (l'intersection de chemin et de surface, voir de surface et de surface).


Avec Asymptote l'intersection chemin/surface est disponible mais pas surface/surface.

O.G.
OG
Modérateur
 
Messages: 2184
Inscription: Lundi 12 Mars 2007, 11:20
Localisation: Rouen
Statut actuel: Actif et salarié | Maître de conférence

Re: Enigma...

Messagepar rebouxo » Dimanche 30 Avril 2017, 19:29

OG a écrit:
rebouxo a écrit: Il manque encore des trucs (l'intersection de chemin et de surface, voir de surface et de surface).


Avec Asymptote l'intersection chemin/surface est disponible mais pas surface/surface.

O.G.


Ah ben j'ai point vue, justement, j'aimerais faire l'intersection d'une droite et d'un cylindre. Je vais regarder plus attentivement.

Merci Olivier

Olivier
A line is a point that went for a walk. Paul Klee
Par solidarité, pas de MP
rebouxo
Modérateur
 
Messages: 6729
Inscription: Mercredi 15 Février 2006, 13:18
Localisation: le havre
Statut actuel: Actif et salarié | Enseignant

Re: Enigma...

Messagepar loicwood » Mardi 02 Mai 2017, 17:46

Avec deux rotors intérieurs :
Code: Tout sélectionner
\begin{tikzpicture}[scale=0.4]
\setcounter{annexterieur}{22}
\draw[thick, fill = green!30]circle(11);
\draw[thick, fill = blue!30]circle(9);
\draw[thick, fill=red!20](0,0)circle(7);
\draw[thick, fill=white](0,0)circle(5);
\foreach \c/\d [count=\x from 0, count=\y from 1, count=\z from 0] in {{B/E},{D/K},{F/M},{H/F},{J/L},{L/G},{C/D},{P/Q},{R/V},
{T/Z},{X/N},{V/T},{Z/O},{N/W},{Y/Y},{E/H},{I/X},{W/U},{G/S},{A/P},{K/A},{M/I},{U/B},{S/R},{Q/C},{O/J}} % rotor II de l'ENIGMA I
{
\draw(\x*360/26:5)--(\x*360/26:11);
\node at (\x*360/26+360/26+180/26:6){\c};
\node at (\y*360/26+360/26+180/26:8){\d};
\node at (\z*360/26+360/26+180/26:10){\Alph{annexterieur}};
\increase{annexterieur}
}
\end{tikzpicture}



On peut jouer sur les compteurs x, y et z pour décaler les lettres (et donc changer la position initiale des rotors)
loicwood
Kilo-utilisateur
 
Messages: 102
Inscription: Dimanche 23 Octobre 2011, 10:24
Localisation: Souppes sur Loing
Statut actuel: Actif et salarié | Enseignant

Précédente

Retourner vers LaTeX

Qui est en ligne

Utilisateurs parcourant ce forum: Google [Bot] et 9 invités