FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Problème de compilateur.
par Pedro Alvarez Hier à 20:01

» COMPILATEUR V 0.9 beta 8 du 18 aout 2017
par Pedro Alvarez Hier à 19:54

» Pb 17 (en analyse): ITEM_SELECT ne fonctionne pas
par Jack Jeu 17 Aoû 2017 - 19:26

» Compilateur FBPano
par Mike Jeu 17 Aoû 2017 - 13:52

» un nouveau editeur panobasic
par Jean Claude Jeu 17 Aoû 2017 - 10:18

» Le compilateur.
par Pedro Alvarez Jeu 17 Aoû 2017 - 8:36

» Pb 16 (en analyse): ON_CLOSE plante à l'exécution
par Jack Mer 16 Aoû 2017 - 20:00

» Pb 15 (en analyse): TIMER_ON plante à l'exécution
par Jack Mer 16 Aoû 2017 - 19:58

» KGF_dll - nouvelles versions
par Yannick Dim 13 Aoû 2017 - 17:35

» probleme d'outil
par Yannick Dim 13 Aoû 2017 - 17:32

» Carte de France des régions
par Yannick Sam 12 Aoû 2017 - 21:33

» Pb 14 (en analyse): PRINT_LOCATE plante à l'exécution
par Jack Ven 11 Aoû 2017 - 22:37

» Petit avertissement [Mots réservés]
par papydall Ven 11 Aoû 2017 - 13:45

» Distances sur plan
par JL35 Jeu 10 Aoû 2017 - 21:29

» Tracé : Triangle, Carrée, Dents de scie, Sinusoïde redressée
par papydall Jeu 10 Aoû 2017 - 14:52

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Août 2017
LunMarMerJeuVenSamDim
 123456
78910111213
14151617181920
21222324252627
28293031   
CalendrierCalendrier

Partagez | 
 

 Spirale de Ulam

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
papydall

avatar

Nombre de messages : 5508
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Spirale de Ulam   Ven 21 Oct 2016 - 17:47

Code:

rem ============================================================================
rem            Spirale de Ulam
rem              Par Papydall
rem ============================================================================
rem Stanislas Marcin Ulam assistait à une conférence fort ennuyeuse et longue.
rem Pour tromper l ennui, il prit son crayon et écrivit les entiers naturels en
rem colimaçon en utilisant les carreaux de sa page.
rem Puis il noircit les cases occupées par les nombres premiers.
rem Il s apperçut que d étranges alignements apparaissaient qu il fallait expliquer.
rem La spirale qui porte son nom était née.
rem On l’appelle aussi spirale des nombres premiers ou horloge d’Ulam.
rem ============================================================================
rem En effet, ces alignements correspondent à des polynômes du 2ème degré du type:
rem                ______________________
rem               |                      |
rem               |  y = a.x² + b.x + c  |
rem               |______________________|                      |
rem
rem ============================================================================
rem Déjà Euler avait proposé la formule n² - n + 41 qui, pour n compris entre 1
rem et 40 ne donne que des nombres premiers.
rem Les plus célèbres sont les suivantes:
rem                _________________________
rem               |                         |
rem               |  y = 4x² + 4x   + 3     |
rem               |  y = 4x² + 18x  + 26    |
rem               |  y = 4x² + 24x  + 43    |
rem               |  y = 4x² + 12x  + 7     |
rem               |  y = 4x² + 162x + 1681  |
rem               |  y = x²  + x    + 17    |
rem               |  y = x²  + x    + 41    | <---- Formule découverte par Euler
rem               |_________________________|
rem ============================================================================
Init()
' Exécutez successivement ces deux Spirales
 Spirale_Ulam(12)
' Spirale_Ulam_2(70)
caption 0,"Terminé"
end
rem ============================================================================
SUB Init()
    dim prem, p, q, c1, c2, i, j, n$
    width 0,screen_y : height 0,screen_y
    picture 10 : width 10,width(0)-50 : height 10,height(0)-50
    top 10,10  : left 10,25 : color 10,0,0,0
    print_target_is 10 : 2d_target_is 10 : font_color 10,0,0,0 : font_bold 10
    c1 = width(10)/2-40  : c2 = height(10)/2-40+30
    2d_pen_color 255,0,0 : 2d_fill_on
    alpha 20 : top 20,20 : left 20,150 : font_bold 20 : font_size 20,14: font_color 20,200,100,50
    hide 20
END_SUB
rem ============================================================================
' Calculer la position d'un entier q quelconque
SUB placer(q)
    dim_local d : ' d est la distance entre le nombre q et le plus petit nombre de la couronne p.
    dim_local e : ' e+1 est le numéro du coté de la couronne où se trouve q.
    d = q - 2 * p * 2 * p - 1
    e = Int(d / (1 + 2 * p))
    select e
        case 0 : i = 0 + 4 * p * p + p - q + 1 : j = 0 - p
        case 1 : i = 0 - p : j = 0 - 4 * p * p - 3 * p - 1 + q
        case 2 : i = 0 - 4 * p * p - 5 * p - 2 + q : j = 0 + p + 1
        case 3 : i = 0 + p + 1 : j = 0 + 4 * p * p + 7 * p + 4 - q
    end_select
End_Sub
rem ============================================================================
' Déterminer si q est premier
SUB premier(q)
    dim_local a,m
    prem = 1
    m = 2 : a = 1
    While ((m * m <= q) And (a <> 0))
        a = mod(q,m) : m = m + 1
    end_while
    If ((a <> 0) And (q > 1))
       prem = 1
    Else
       prem = 0
    end_if
END_SUB
rem ============================================================================
SUB Spirale_Ulam(couronne)
    for p = 0 to couronne
        caption 0,"Couronne : " + str$(p)+ " / " + str$(couronne)
        for q = 4*p*p+1 to (2*p+2)*(2*p+2)
            n$ = str$(q)
            while len(n$) < 3 : n$ = "0" + n$ : end_while
            Premier(q) : Placer(q)
            if prem = 1
              2d_fill_color 255,0,0 : 2d_circle 10+c1+30*i,8+c2+30*j,15
            end_if
            if n$ = "001"
               font_color 10,255,255,255 : 2d_fill_color 0,0,255
            else
               font_color 10,000,000,000 : 2d_fill_color 255,255,0
            end_if
            print_locate c1+30*i,c2+30*j : print n$
       next q
    next p
    caption 20," Les cercles rouges contiennent les nombres premiers " : show 20
END_SUB
rem ============================================================================
SUB Spirale_Ulam_2(couronne)
    for p = 0 to couronne
        caption 0,"Couronne : " + str$(p)+ " / " + str$(couronne)
        for q = 4*p*p+1 to (2*p+2)*(2*p+2)
            n$ = str$(q)
            while len(n$) < 3 : n$ = "0" + n$ : end_while
            Premier(q) : Placer(q)
            if prem = 1
                2d_pen_color 255,0,0 : 2d_circle c1+4*i,c2+4*j,2
            end_if
       next q
    next p
    caption 20," Observez ces alignements des nombres premiers " : show 20
END_SUB
rem ============================================================================

Bon divertissement !  
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
papydall

avatar

Nombre de messages : 5508
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Spirale de Ulam   Dim 23 Oct 2016 - 6:02

Je sais parfaitement que la spirale d'Ulam  n’est pas une spirale facile à comprendre.
En voici une autre, moins coriace.

Code:

rem ============================================================================
rem         Une autre spirale
rem ============================================================================

dim xc,yc,c,c2,theta,r,i,x,y
full_space 0 : color 0,0,0,0 : 2d_fill_on
xc = width(0)/2 : yc = height(0)/2
c = 4 : c2 = 1.5*c
for i = 1 to 4000
    theta = sqr(i) * 2 * pi : r = sqr(i)
    x = 0-cos(sqr(i)*2*pi)*sqr(i)
    y = sin(sqr(i)*2*pi)*sqr(i)
    2d_fill_color mod(theta,255),abs(255-theta),mod(theta,100)
    2d_circle xc+c2*x,yc+c2*y,c
next i
rem ============================================================================
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
jean_debord

avatar

Nombre de messages : 743
Age : 63
Localisation : Limoges
Date d'inscription : 21/09/2008

MessageSujet: Re: Spirale de Ulam   Lun 24 Oct 2016 - 9:57

Merci papydall !

Voilà encore de bons candidats pour une adaptation en FBPano.

Cela me rappelle que j'ai écrit une DLL pour calculer sur de grands nombres entiers. Elle aussi mériterait d'être intégrée à FBPano.

Sans doute pour la prochaine mise à jour !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://www.unilim.fr/pages_perso/jean.debord/index.htm
papydall

avatar

Nombre de messages : 5508
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Spirale de Ulam   Lun 24 Oct 2016 - 16:16

Salut Jean_debord et merci !

Voici un autre algorithme pour tracer une spirale carrée.


Code:

rem ============================================================================
rem         Spirale carrée
rem ============================================================================
dim x, y, pas , dist, NbTour
width 0 , screen_x *.75  : height 0 , screen_y *.75
x = width(0)/2 : y = height(0)/2
pas    = 1  : ' pas de déplacement
dist   = 10 : ' distance entre les spires
NbTour = 50 : ' Nombre de spires de la spirales
2d_pen_width 2 : 2d_poly_from x, y : ' Départ
repeat
    y = y + dist*pas : 2d_poly_to x,y : ' Vers le bas
    x = x + dist*pas : 2d_poly_to x,y : ' Vers la droite
    pas = pas + 1    : ' pour ne pas repasser ultérieurement par un point déjà parcouru
    y = y - dist*pas : 2d_poly_to x,y : ' Vers le haut
    x = x - dist*pas : 2d_poly_to x,y : ' Vers la gauche
    pas = pas + 1
until pas > NbTour
rem ============================================================================

NB : Le code de la Spirale d’Ulam, ci-haut posté mérite d’être examiné de près, notamment la SUB Placer(q)


Dernière édition par papydall le Lun 23 Jan 2017 - 14:54, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
jjn4

avatar

Nombre de messages : 1594
Date d'inscription : 13/09/2009

MessageSujet: +++   Lun 24 Oct 2016 - 18:24

La dernière spirale est sans doute
à relier au mouvement cubiste ?
(Bravo, en tout cas !)
Laughing alien cheers Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://jjn4.e-monsite.com
Contenu sponsorisé




MessageSujet: Re: Spirale de Ulam   

Revenir en haut Aller en bas
 
Spirale de Ulam
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Rampes hélicoïdales
» Structure spirale n°2

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC 32 bits :: Vos sources, vos utilitaires à partager-
Sauter vers: