FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» trop de fichiers en cours
Les programmes de papydall Emptypar Marc Aujourd'hui à 11:42

» Bataille navale SM
Les programmes de papydall Emptypar jjn4 Hier à 17:39

» Une calculatrice en une ligne de programme
Les programmes de papydall Emptypar jean_debord Hier à 8:01

» Gestion d'un système client-serveur.
Les programmes de papydall Emptypar Pedro Jeu 25 Avr 2024 - 19:31

» Les maths du crocodile
Les programmes de papydall Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

» Naissance de Crocodile Basic
Les programmes de papydall Emptypar jean_debord Jeu 25 Avr 2024 - 8:45

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Les programmes de papydall Emptypar Froggy One Mer 24 Avr 2024 - 18:38

» Dessine-moi une galaxie
Les programmes de papydall Emptypar jjn4 Lun 22 Avr 2024 - 13:47

» Erreur END_SUB
Les programmes de papydall Emptypar jjn4 Lun 22 Avr 2024 - 13:43

» Bug sur DIM_LOCAL ?
Les programmes de papydall Emptypar papydall Dim 21 Avr 2024 - 23:30

» Form
Les programmes de papydall Emptypar leclode Dim 21 Avr 2024 - 18:09

» 2D_fill_color(résolu)
Les programmes de papydall Emptypar leclode Sam 20 Avr 2024 - 8:32

» Consommation gaz électricité
Les programmes de papydall Emptypar leclode Mer 17 Avr 2024 - 11:07

» on_key_down (résolu)
Les programmes de papydall Emptypar leclode Mar 16 Avr 2024 - 11:01

» Sous-programme(résolu)
Les programmes de papydall Emptypar jjn4 Jeu 4 Avr 2024 - 14:42

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Avril 2024
LunMarMerJeuVenSamDim
1234567
891011121314
15161718192021
22232425262728
2930     
CalendrierCalendrier
Le Deal du moment : -21%
LEGO® Icons 10329 Les Plantes Miniatures, ...
Voir le deal
39.59 €

 

 Les programmes de papydall

Aller en bas 
+6
Froggy One
Ouf_ca_passe
JL35
Minibug
papydall
jean_debord
10 participants
Aller à la page : 1, 2, 3, 4, 5, 6, 7, 8  Suivant
AuteurMessage
jean_debord

jean_debord


Nombre de messages : 1249
Age : 69
Localisation : Limoges
Date d'inscription : 21/09/2008

Les programmes de papydall Empty
MessageSujet: Les programmes de papydall   Les programmes de papydall EmptyJeu 7 Nov 2019 - 10:55

Les programmes de papydall constituent une mine d'exemples à adapter Smile

En voici un : le calcul du centre de gravité et de la surface d'un polygone.

Code:

' *******************************************************************
' Aire et centre de gravite d'un polygone
' D'apres un programme de Papydall sur le forum Panoramic
' *******************************************************************

' Description du polygone : nombre de sommets, coordonnees des points

data 5
data 50,  100
data 350, 250
data 550, 150
data 400, 350
data 100, 300

dim n%, i%, a, xg, yg

read n%

dim x(n%), y(n%)

for i% = 1 to n%
  read x(i%), y(i%)
next i%  

mode 1, "Aire et Centre de gravite d'un polygone"

' Dessin du polygone

pen CL_VERT_VIF

move x(1), y(1)
for i% = 1 to n% - 1
  draw x(i% + 1), y(i% + 1)
next i%
draw x(1), y(1)  

' Calcul du centre de gravite

centre_gravite x(), y(), a, xg, yg

' Remplissage de la surface

move xg, yg
fill CL_VERT_VIF

' Marquage du centre de gravite

pen CL_ROUGE_VIF
pie xg, yg, 5

' Ecriture des resultats

pen CL_BLANC

locate 4, 22
print "Centre de gravite : (" & int(xg) & "," & int(yg) & ")"

locate 4, 24
print "Aire du polygone  : " & a

while inkey$() = "" : wend

' ------------------------------------------------------

sub centre_gravite (x(), y(), a, xg, yg)
' Calcule l'aire (a) et la position du centre de gravite (xg, yg)
' pour le polygone a n sommets de coordonnees x(1..n), y(1..n)
' Les coordonnees du dernier point sont copiees dans x(0) et y(0)

  dim n%

  n% = ubound(x)
  
  x(0) = x(n%)
  y(0) = y(n%)
  
  dim z(n%), i%, s, b

  s = 0
  for i% = 0 to n% - 1
    z(i%) = x(i%) * y(i% + 1) - x(i% + 1) * y(i%)
    s = s + z(i%)
  next i

  a = s / 2
  b = 1 / (3 * s)

  s = 0
  for i% = 0 to n% - 1
    s = s + z(i%) * (x(i%) + x(i% + 1))
  next i

  xg = s * b

  s = 0
  for i% = 0 to n% - 1
    s = s + z(i%) * (y(i%) + y(i% + 1))
  next i%

  yg = s * b
end_sub
Revenir en haut Aller en bas
http://www.unilim.fr/pages_perso/jean.debord/index.htm
papydall

papydall


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

Les programmes de papydall Empty
MessageSujet: Re: Les programmes de papydall   Les programmes de papydall EmptyJeu 7 Nov 2019 - 22:43

Salut Jean_debord

Je viens d’installer le crocodile pour la 1ère fois   Embarassed et j’avoue que c’est un travail de pro !
Merci, Jean.
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
jean_debord

jean_debord


Nombre de messages : 1249
Age : 69
Localisation : Limoges
Date d'inscription : 21/09/2008

Les programmes de papydall Empty
MessageSujet: Re: Les programmes de papydall   Les programmes de papydall EmptyDim 10 Nov 2019 - 16:06

Merci papydall Smile

Voici un autre exemple sur les polygones, avec cette fois-ci une contribution de Klaus :

Code:

' *******************************************************************
' Recherche d'un point a l'interieur d'un polygone
' D'apres un programme de Klaus sur le forum Panoramic
' *******************************************************************

' Description du polygone : nombre de sommets, coordonnees des points

data 5
data 50,  100
data 350, 250
data 550, 150
data 400, 350
data 100, 300

dim n%, i%, dx, xp, yp

read n%

dim x(n%), y(n%)

for i% = 1 to n%
  read x(i%), y(i%)
next i%  

dx = 5

if not pt_dans_polygone(x(), y(), dx, xp, yp) then
  print "Point interieur non trouve !"
  end
end_if  

mode 1, "Trouver un point a l'interieur d'un polygone"

' Dessin du polygone
 
pen CL_VERT_VIF
move x(1), y(1)
for i% = 1 to n% - 1
  draw x(i% + 1), y(i% + 1)
next i%
draw x(1), y(1)  

' Remplissage de la surface

move xp, yp
fill CL_VERT_VIF

' Marquage du point interieur au polygone

pen CL_ROUGE_VIF
pie xp, yp, 5

' Ecriture des resultats

pen CL_BLANC

locate 4, 22
print "Coordonnees du point : (" & int(xp) & "," & int(yp) & ")"

while inkey$() = "" : wend


sub pt_sur_mediane (x(), y(), i%, dx, act%, xp, yp)
' Cherche un point (xp,yp) sur la mediane issue du sommet i
' dx = pas du deplacement sur Ox
' act = sens du deplacement (+/- 1)

  dim n%, im1%, ip1%, xm, ym, m, dx1

  n% = ubound(x)

  ' 2 points de part et d'autre du point i
  if i% = 1  then im1% = n% else im1% = i% - 1
  if i% = n% then ip1% = 1  else ip1% = i% + 1

  ' Milieu du segment defini par ces 2 points
  xm = 0.5 * (x(im1%) + x(ip1%))
  ym = 0.5 * (y(im1%) + y(ip1%))

  ' Pente de la mediane
  m = (ym - y(i%)) / (xm - x(i%))

  ' Position du point sur la mediane
  dx1 = act% * dx
  xp = x(i%) + dx1
  yp = y(i%) + m * dx1
end_sub

function pt_interieur% (x(), y(), xp, yp)
' Teste si le point (xp,yp) est a l'interieur du polygone
' Si oui retourne TRUE, sinon FALSE

  dim n%, i%, j%, lg1%, lg2%, adroite%, agauche%, xx

  n% = ubound(x)

  for i% = 1 to n%
    if i% < n% then j% = i% + 1 else j% = 1

    ' Pour chaque arete du polygone, tester si elle coupe
    ' l'horizontale passant par le point (xp,yp)
    
    lg1% = (y(i%) <= yp and y(j%) >  yp)
    lg2% = (y(i%) >  yp and y(j%) <= yp)

    ' Si c'est le cas, calculer l'abscisse xx de l'intersection
    ' et basculer l'indicateur approprie

    if lg1% or lg2% then
      xx = x(i%) + (y(j%) - y(i%)) * (yp - y(i%)) / (x(j%) - x(i%))
      if xx < xp then agauche% = not agauche%
      if xx > xp then adroite% = not adroite%
    end_if
  next i%

  return (agauche% and adroite%)
end_function

function pt_dans_polygone% (x(), y(), dx, xp, yp)
' Cherche un point (xp,yp) a l'interieur du polygone
' a n sommets de coordonnees x(1..n), y(1..n)
' dx = deplacement sur Ox
' Retourne TRUE si succes, FALSE sinon

  dim i%

  for i% = 1 to ubound(x)
    pt_sur_mediane x(), y(), i%, dx, 1, xp, yp
    if pt_interieur(x(), y(), xp, yp) then return TRUE

    pt_sur_mediane x(), y(), i%, dx, -1, xp, yp
    if pt_interieur(x(), y(), xp, yp) then return TRUE
  next i%

  return FALSE
end_function

Remarquons l'utilisation de quelques astuces de FBCroco :

- récupération de la taille des tableaux à l'intérieur d'un sous-programme par UBOUND (ceci évite d'avoir à passer la taille en paramètre)

- utilisation des constantes TRUE et FALSE pour les variables binaires

- affectation du résultat d'un test à une variable :

Code:

lg1% = (y(i%) <= yp and y(j%) >  yp)

- sortie d'une FUNCTION par RETURN avec affectation automatique du résultat

Tout cela simplifie l'écriture des programmes.
Revenir en haut Aller en bas
http://www.unilim.fr/pages_perso/jean.debord/index.htm
jean_debord

jean_debord


Nombre de messages : 1249
Age : 69
Localisation : Limoges
Date d'inscription : 21/09/2008

Les programmes de papydall Empty
MessageSujet: Re: Les programmes de papydall   Les programmes de papydall EmptyDim 10 Nov 2019 - 16:13

Un autre exemple : les courbes de Bézier :

Code:

' *******************************************************************
' Courbes de Bezier
'
' Connaissant 4 points A(0,0), B(1,0), C(1,1) et D(0,1) on demande
' de tracer les courbes alpha = B(A, B, C, D), beta = B(A, B, D, C)
' et gamma = B(A, C, B, D)
'
' cf. http://www.math.u-psud.fr/~perrin/CAPES/geometrie/BezierDP.pdf
' *******************************************************************

' Le trace se fait sur une zone de 400x400

const Ax =   0, Ay = 0
const Bx = 400, By = 0
const Cx = 400, Cy = 400
const Dx =   0, Dy = 400

mode 3, "Courbes de Bezier", 500, 500

print "A",  40, 40
print "B", 445, 40
print "C", 445, 472
print "D",  45, 472

origin 50, 50, 50, 450, 450, 50, CL_NOIR, CL_BLANC

plot_curve Ax, Ay, Bx, By, Cx, Cy, Dx, Dy, CL_ROUGE_VIF, 280, 110, "alpha"
plot_curve Ax, Ay, Bx, By, Dx, Dy, Cx, Cy, CL_VERT_VIF, 280, 370, "beta"
plot_curve Ax, Ay, Cx, Cy, Bx, By, Dx, Dy, CL_TURQUOISE_VIF, 20, 300, "gamma"

while inkey$() = "" : wend

' ----------------------------------------------------------------------------

sub bezier (x0, y0, x1, y1, x2, y2, x3, y3, x(), y())
' ----------------------------------------------------------------------------
' Calcul d'une courbe de Bezier cubique
' D'apres papydall sur le forum Panoramic
' ----------------------------------------------------------------------------
' Une courbe de Bezier cubique est definie par quatre points P0, P1, P2 et P3
' de coordonnees (x0,y0), (x1,y1), (x2,y2) et (x3,y3)
' P0 et P3 correspondent aux points des extremites ou noeuds de la courbe.
' P1 et P2 correspondent aux points de controle ou poignees, chacun apparie
' avec l'un des points terminaux.
' Les points de controle ont l'utile propriete suivante :
' Une ligne debutant a une extremite de la courbe et se terminant au point de
' controle correspondant est tangente a la courbe au point terminal.
' Ceci permet la jonction douce de multiples courbes de Bezier.

' La courbe se trace en partant du point P0, en se dirigeant vers le point P1
' et en arrivant au point P3 selon la direction P2-P3.
' La courbe ne passe pas necessairement  par P1 ni par P2.

' Le sous-programme calcule (n + 1) points de la courbe de Bezier
' et les retourne dans x(0..n) et y(0..n)
' ----------------------------------------------------------------------------

  dim n%, i%, t, t2, t3, u, u2, u3, a, b

  n% = ubound(x)

  for i% = 0 to n%
    t = i% / n%
    t2 = t * t
    t3 = t2 * t
    u = 1 - t
    u2 = u * u
    u3 = u2 * u
    a = 3 * u2 * t
    b = 3 * u * t2
    x(i%) = u3 * x0 + a * x1 + b * x2 + t3 * x3
    y(i%) = u3 * y0 + a * y1 + b * y2 + t3 * y3
  next i%
end_sub

sub plot_curve (x0, y0, x1, y1, x2, y2, x3, y3, col%, lgdx%, lgdy%, lgd$)
' ----------------------------------------------------------------------------
' Trace la courbe de Bezier avec la couleur col
' Ecrit la legende a la position (lgdx, lgdy)
' ----------------------------------------------------------------------------

  const n = 50    ' Nb de points pour la courbe de Bezier
  dim x(n), y(n)  ' Coordonnees des points
  dim i%          ' Indice du point

  bezier x0, y0, x1, y1, x2, y2, x3, y3, x(), y()

  pen col%

  move x(0), y(0)
  for i% = 1 to n%
    draw x(i), y(i)
  next i%

  print lgd$, lgdx%, lgdy%
end_sub
Revenir en haut Aller en bas
http://www.unilim.fr/pages_perso/jean.debord/index.htm
jean_debord

jean_debord


Nombre de messages : 1249
Age : 69
Localisation : Limoges
Date d'inscription : 21/09/2008

Les programmes de papydall Empty
MessageSujet: Re: Les programmes de papydall   Les programmes de papydall EmptyVen 22 Nov 2019 - 9:36

Une version colorée du dernier programme de papydall :

Code:

const RadToDeg = 180 / 3.14159

dim x%, y%, r%, g%, b%, h

mode 3, "Triangle de Sierpinski", 500, 500

for x% = 1 to 500
  for y% = 1 TO 500
    h = atan2(y%, x%) * RadToDeg
    HSVtoRGB h, 1, 1, r%, g%, b%
    pen RGB(r%, g%, b%)
    plot x%, x% and y%
  next y%
next x%

while inkey$() = "" : wend
Revenir en haut Aller en bas
http://www.unilim.fr/pages_perso/jean.debord/index.htm
papydall

papydall


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

Les programmes de papydall Empty
MessageSujet: Re: Les programmes de papydall   Les programmes de papydall EmptyVen 22 Nov 2019 - 14:17

Merci jean_debord
En couleur c'est mieux.
... et en ajoutant BIN_OR, ça complète l'espace.

Code:

const RadToDeg = 180 / 3.14159

dim x%, y%, r%, g%, b%, h

mode 3, "Triangle de Sierpinski", 500, 500

for x% = 1 to 500
  for y% = 1 TO 500
    h = atan2(y%, x%) * RadToDeg
    HSVtoRGB h, 1, 1, r%, g%, b%
    pen RGB(r%, g%, b%)
    plot x%, x% and y%
    plot x%, x% or y%
  next y%
next x%

while inkey$() = "" : wend
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
papydall

papydall


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

Les programmes de papydall Empty
MessageSujet: Re: Les programmes de papydall   Les programmes de papydall EmptyVen 22 Nov 2019 - 22:57

Je me suis mis à l’école de CROCODILE BASIC.
Voici mon premier code :

Code:

dim x,y,nextx,nexty,r

mode 3, "PAPYDALL A L'ECOLE DE CROCODILE BASIC : Fougere de Sierpinski",500,500 : origin 250, 30
pen RGB(0, 255,0 )

while inkey$() = ""
   r = rnd()
   if r < .01 then nextx = 0 : nexty = .16*y
   if r >= .01 and r < .08 then nextx = .2*x- .26*y : nexty = .23*x+.22*y+1.6
   if r >= .08 and r < .15 then nextx = -.15*x+.28*y : nexty = -.26*x+.24*y+.44
   if r >= .15 then nextx = .85*x+.04*y : nexty = -.04*x+.85*y+1.6
   x = nextx : y = nexty
   plot 60 * x,40 * y
wend


Résultat:
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
papydall

papydall


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

Les programmes de papydall Empty
MessageSujet: Re: Les programmes de papydall   Les programmes de papydall EmptySam 23 Nov 2019 - 1:40

Code:

rem ============================================================================
rem                   récursivité
rem ============================================================================
dim xc,yc
xc = 350 : yc = 350
mode 3, "PAPYDALL TESTE LA RECURSIVITE AVEC CROCODILE BASIC : ",700,700
Cercle(xc,yc,xc-20)
while inkey$ = "" : wend
rem ============================================================================
SUB Cercle(x,y,r)    
    arc x,y,r    ' tracer un cercle
    if r > 50 then
       Cercle(x + r / 2, y, r / 2) ' 1er appel recursif
       Cercle(x - r / 2, y, r / 2) ' 2eme appel recursif
       Cercle(x, y + r / 2, r / 2) ' 3eme appel recursif
       Cercle(x, y - r / 2, r / 2) ' 4eme appel recursif
    end_if  
END_SUB
rem ============================================================================


ça donne ça:
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
jean_debord

jean_debord


Nombre de messages : 1249
Age : 69
Localisation : Limoges
Date d'inscription : 21/09/2008

Les programmes de papydall Empty
MessageSujet: Re: Les programmes de papydall   Les programmes de papydall EmptySam 23 Nov 2019 - 9:32

Oui la récursivité marche très bien !

La prochaine version de FBCroco apportera les nombres complexes. J'ai déjà adapté ton programme de transformation conforme.

Je vais faire un sous-répertoire contrib\papydall pour y mettre les exemples que tu proposes.

Bonne continuation avec le crocodile !

Revenir en haut Aller en bas
http://www.unilim.fr/pages_perso/jean.debord/index.htm
papydall

papydall


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

Les programmes de papydall Empty
MessageSujet: Re: Les programmes de papydall   Les programmes de papydall EmptySam 23 Nov 2019 - 17:16

Merci Jean pour ce beau travail.
De mon côté j’essaie d’adapter quelques codes que j’ai faits pour le compilateur Panoramic, mais à mon rythme (santé oblige) et à mon avancement dans l'apprentissage du crocodile.
A propos, existe-t-il en Crocodile Basic (j’accepte même en Caïman ou en Alligator tongue )  une instruction qui définit la largeur (W en pixels) des tracés qui est équivalente à 2D_PEN_WIDTH W de Panoramic ?

REM : avec les nombres complexes, on va bien danser travailler!

A ++
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
papydall

papydall


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

Les programmes de papydall Empty
MessageSujet: Re: Les programmes de papydall   Les programmes de papydall EmptySam 23 Nov 2019 - 18:00

@Jean_Debord

Est-t-il possible d'adapter la ligne 31 :  2d_pen_width wp%


Code:

'  ****************************************************************************
'  *                       Un arbre, une forêt en récursif                    *
'  ****************************************************************************

dim w,h,wp%,col%,i%

mode 3, "LA FORET PAR PAPYDALL",1000,700
print "VOICI UN ARBRE",300,650
print "UNE TOUCHE POUR TRACER UNE FORET",200,600

Arbre(500,60,100,pi)
while inkey$ = "" : wend
for i% = 1 to 10
   Arbre(10+800*rnd(),10+200*rnd(),10+50*rnd(),pi)
next i%
print "                                   ",200,650
print "UNE TOUCHE POUR SORTIR DE LA FORET ...",200,600

while inkey$ = "" : wend
end
rem ============================================================================
SUB Arbre(x,y,size,angle)
   col% = rgb(0,255,0)
   pen col%
   if size > 2 then
      '     ____________________________________________________________
      '    *                                                            *
      '    *    wp% = size / 4                                          *
      '    *    if wp% < 1 then wp% = 1                                 *
      '    *    if wp% > 20 then wp% = 20                               *
      '    *    2d_pen_width wp%   <----------- Adapter cette commande  *
      '    *____________________________________________________________*

      plot x,y,col%      
      draw int(x - size * sin(angle)), int(y - size * cos(angle))      
      Arbre(x-size*sin(angle),y-size*cos(angle),6*size/8,angle+0.6+rnd(100)/200)
      Arbre(x-size*sin(angle),y-size*cos(angle),6*size/8,angle-0.6+rnd(100)/200)

   end_if
END_SUB
rem ============================================================================



Spoiler:


Spoiler:
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
jean_debord

jean_debord


Nombre de messages : 1249
Age : 69
Localisation : Limoges
Date d'inscription : 21/09/2008

Les programmes de papydall Empty
MessageSujet: Re: Les programmes de papydall   Les programmes de papydall EmptySam 23 Nov 2019 - 19:51

papydall a écrit:

Est-t-il possible d'adapter la ligne 31 :  2d_pen_width wp%

Hélas non ! Mais c'est possible avec FBPano en utilisant les graphismes FLTK.

Mais ce n'est que partie remise. FBPano et FBCroco sont appelés à fusionner.
Revenir en haut Aller en bas
http://www.unilim.fr/pages_perso/jean.debord/index.htm
jean_debord

jean_debord


Nombre de messages : 1249
Age : 69
Localisation : Limoges
Date d'inscription : 21/09/2008

Les programmes de papydall Empty
MessageSujet: Re: Les programmes de papydall   Les programmes de papydall EmptyJeu 28 Nov 2019 - 16:26

Les graphismes FLTK devraient être disponibles dans la prochaine version de FBCroco.

On aura alors (entre autres) une commande FL_PEN_STYLE pour choisir l'épaisseur du trait ainsi que les lignes pointillées.

Voici un exemple de la syntaxe envisagée :

Code:

mode 1

' Instructions de type Amstrad

move ...
draw ...

' Instructions de type FLTK

fl_pen_style ...

fl_move ...
fl_draw ...

fl_image_display

L'instruction FL_IMAGE_DISPLAY est obligatoire pour afficher les graphismes FLTK car ceux-ci sont dessinés sur une image en mémoire qui doit être collée sur l'écran graphique.

Bien sûr une commande telle que FL_PEN_STYLE n'affectera que les fonctions FL_... Les fonctions de type Amstrad conserveront leur spécificité (donc 1 pixel de large pour les lignes)

Je pense que cela devrait marcher. Les premiers tests sont encourageants Smile
Revenir en haut Aller en bas
http://www.unilim.fr/pages_perso/jean.debord/index.htm
papydall

papydall


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

Les programmes de papydall Empty
MessageSujet: Re: Les programmes de papydall   Les programmes de papydall EmptySam 30 Nov 2019 - 1:23

Merci Jean_Debord pour ce travail et bonne continuation!
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
papydall

papydall


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

Les programmes de papydall Empty
MessageSujet: Re: Les programmes de papydall   Les programmes de papydall EmptyLun 2 Déc 2019 - 15:02

Code:

' ============================================================================================
'              Calcul des 1000 premières décimales de PI
' ============================================================================================
dim t(202)
dim nmax%,b%,d%,p%,m%,n%,i%,q%,r%
dim tex$,aff$

mode 2,"  CALCUL DES 1000 PREMIERES DECIMALES DE PI "

    nmax = 3340 : b = 100000
    for i = 1 to 201 : t(i) = 0 : next i
    t(0) = 2*nmax : d = 2*nmax+1
    Divise
    for n = nmax to 2 step -1
        t(0) = t(0)+2 : d = 2*n-1 : Divise
        m = n-1 : Multiplie
    next n
    t(0) = t(0)+2
    aff$ = "PI = 3." + chr$(13) + " "
    for i = 1 to 200
        tex$ = str$(t(i))
        while len(tex$) < 5 : tex$ = "0" + tex$ : end_while
        aff$ = aff$ + " " + tex$
        if i mod 10 = 0 then aff$ = aff$ + chr$(13)+" "
    next i
    print aff$
    locate 20,24 : print "....Une touche pour sortir ..."

while inkey = "" : wend
'============================================================================================
SUB Divise()    
    for i = 0 to 201
        q = int(t(i)/d) : r = t(i)-d*q : t(i) = q : t(i+1) = t(i+1)+b*r
    next i
END_SUB
rem =========================================================================================
SUB Multiplie()
    q = 0
    for i = 201 to 1 step -1
        p = t(i) * m + q : q = int(p/b) : t(i) = p - q * b
    next i
    t(0) = t(0) * m + q
END_SUB
rem =========================================================================================



Résultat:
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
papydall

papydall


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

Les programmes de papydall Empty
MessageSujet: Re: Les programmes de papydall   Les programmes de papydall EmptyLun 2 Déc 2019 - 17:41

Salut Jean.
Peux-tu jetez un œil sur ce code et pourquoi cette erreur à la compilation ?
Code:

dim n%
mode 2
for n = 32 to 255
   print n; " = " ; chr$(n);  : ' error 57 : Type mismatch, at parameter 1 of __PRINT__() in '__print__n; " = " chr(n);'
next n
while inkey = "" : wend

D’ailleurs, le simple code suivant n’affiche que le mot bonjour en écrasant le salut.
Code:

print "salut"
print "bonjour"


Il parait (mais je me trompe peut-être) que le crocodile n'apprécie ni la virgule, ni le point-virgule ni même le passage à la ligne dans la commande PRINT, encore moins le mélange de type dans les PRINT  même à des endroits différents du programme.


Code:

dim n%,a$
mode 2
n% = 123  
a$ = "Croco"
print n%  : ' <<< error Type mismatch etc ...
print a$
while inkey = "" : wend
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
jean_debord

jean_debord


Nombre de messages : 1249
Age : 69
Localisation : Limoges
Date d'inscription : 21/09/2008

Les programmes de papydall Empty
MessageSujet: Re: Les programmes de papydall   Les programmes de papydall EmptyMar 3 Déc 2019 - 8:47

papydall a écrit:

Il parait (mais je me trompe peut-être) que le crocodile n'apprécie ni la virgule, ni le point-virgule ni même le passage à la ligne dans la commande PRINT, encore moins le mélange de type dans les PRINT  même à des endroits différents du programme.

C'est bien cela, mais uniquement en mode graphique (mode 2 dans ton exemple). En mode texte, tout se passe normalement.

En mode graphique, on ne peut imprimer que des chaînes de caractères, pouvant inclure des caractères de contrôle. Par exemple on pourrait faire :

Code:

print a$ & n% & chr$(13) & a$

La version __PRINT__ est celle qui figure dans le code FreeBASIC pour la différencier du PRINT normal.

Je n'ai pas cru bon de mettre 2 mots-clés différents, mais on pourrait le faire (par exemple GPRINT pour le mode graphique)

En mode graphique, chaque caractère est considéré comme un sprite. C'est grâce à cela qu'on peut avoir des caractères semi-graphiques et des caractères redéfinissables.
Revenir en haut Aller en bas
http://www.unilim.fr/pages_perso/jean.debord/index.htm
papydall

papydall


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

Les programmes de papydall Empty
MessageSujet: Re: Les programmes de papydall   Les programmes de papydall EmptyMer 4 Déc 2019 - 5:07

Merci Jean pour ta réponse.
J'ai pigé.

Voici un code qui dessine l'arbre de Pythagore (en récursif).

Code:

rem ===================================================
rem             Arbre de Pythagore
rem ===================================================
dim h,w,w2,diff
w = 800 : h = w * 11 \ 16 : w2 = w \ 2 : diff = w \ 12
mode 3,"Arbre de Pythagore",w,h

pythagoras_tree(w2 - diff, h - 10 , w2 + diff , h - 10 , 0)
locate 1,2   : print "Arbre de "
locate 45,2  : print "Par"
locate 1,4   : print "Pythagore"
locate 43,4  : print "Papydall"
locate 1,34  : print "Une touche ..."
locate 36,34 : print "... pour sortir"
while inkey() = "" : wend
end
rem =====================================================
SUB pythagoras_tree(x1, y1, x2 , y2 , depth)
    dim dx,dy,x3,y3,x4,y4,x5,y5
    If depth > 12 Then exit_sub : ' <<<< Essayez d'autres valeur autre que 12
    dx = x2 - x1 : dy = y1 - y2
    x3 = x2 - dy : y3 = y2 - dx
    x4 = x1 - dy : y4 = y1 - dx
    x5 = x4 + (dx - dy) / 2
    y5 = y4 - (dx + dy) / 2
    plot x1,h-y1 : draw x2,h-y2 : draw x3,h-y3 : draw x4,h-y4 : draw x1,h-y1
    pythagoras_tree(x4, y4, x5, y5, depth + 1)
    pythagoras_tree(x5, y5, x3, y3, depth + 1)
END_SUB
rem ======================================================

Pour ceux qui n'ont pas mordu au crocodile, voici ce que ça donne:
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
jean_debord

jean_debord


Nombre de messages : 1249
Age : 69
Localisation : Limoges
Date d'inscription : 21/09/2008

Les programmes de papydall Empty
MessageSujet: Re: Les programmes de papydall   Les programmes de papydall EmptyMer 4 Déc 2019 - 9:43

Bonjour Papydall

Merci pour ces nouveaux exemples.

Le dossier contrib\papydall se remplit rapidement !

Les gens ne mordent pas au crocodile parce qu'ils ont peur d'être mordus par lui Smile
Revenir en haut Aller en bas
http://www.unilim.fr/pages_perso/jean.debord/index.htm
papydall

papydall


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

Les programmes de papydall Empty
MessageSujet: Re: Les programmes de papydall   Les programmes de papydall EmptyMer 4 Déc 2019 - 21:40

Je vous laisse découvrir par vous-même ce que fait le programme suivant!

Code:

rem ============================================================================
rem         IMPLEMENTATION DES COMMANDES TURTLE DU TYPE LOGO
rem ============================================================================
rem  LES COMMANDES SUIVANTES SONT DISPONIBLES
rem
rem  FPOS(xp,yp)  :  Place la tortue en (xp,yp), le cap n est pas modifié
rem  ORIGINE()    :  Remet la tortue à l origine, cap vers le Nord
rem  FCAP(angle0) :  Oriente la tortue dans une direction (en degrés)
rem  AVANCE(d)    :  Avance de d pixels en dessinant
rem  RECULE(d)    :  Recule de d pixels en dessinant
rem  GAUCHE(a)    :  Tourne à gauche de a degrés
rem  DROITE(a)    :  Tourne à droite de a degrés
rem ============================================================================
rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
rem ============================================================================
rem DEMO
const Deg2Rad = pi/180  
dim x,y,x0,y0,angle

mode 3,"Utilisation des commandes du type LOGO",800,600 : origin 400,300
x0 = 0 : y0 = 0 : origine

Demo
locate 1,2 : print "That's all folks !!!"
locate 1,35 : print "Une touche pour sortir ..."
while inkey() = "" : wend
end
rem ============================================================================
' Les commandes SLEEP dans certaines SUB ont pout but de ralentir un peu le tracé
' Vous pouvez les mettre en REM ou modifier leur argument.
rem ============================================================================
SUB Demo()
    Carre(150)      : Info
    Polygone(100,6) : Info
    Etoile          : Info
    Fpos(x0-100,y0-200) : Koch(1,5)   : Info
    Fpos(x0,y0-250) : Arbre(15,500)   : Info
    Slalom      : Info
    Joggy_Star  : Info
    Hexagone    : Info
    Rosace      : Info
    Peltonwheel : Info
    Hairy_Star  
END_SUB
rem ============================================================================
SUB Info()
    locate 8,2 : print "DEMO DES COMMANDES TURTLE PAR PAPYDALL" : sleep 2000 : cls
END_SUB
rem ============================================================================
SUB Carre(c)
    dim i
    for i = 1 to 4 : Avance(c) : Droite(90) : sleep 100 :  next i
END_SUB
rem ============================================================================
SUB Polygone(longueur,NbCotes)
    dim i
    for i = 1 to NbCotes
        Avance(longueur) : Droite(360/NbCotes)
        sleep 100
    next i
END_SUB
rem ============================================================================
' Etoile à 6 branches
SUB Etoile()
    dim i
    for i = 1 to 6
        Avance(100) : Droite 120 : Avance(100) : Gauche(60)
        sleep 100
    next i
END_SUB
rem ============================================================================
SUB Koch(l,n)
    if n = 0 then
       avance(1)
    else
       Koch(l/3,n-1)
       gauche(60)  : Koch(l/3,n-1)
       droite(120) : Koch(l/3,n-1)
       gauche(60)  : Koch(l/3,n-1)
    end_if
END_SUB
rem ============================================================================
SUB Arbre(n,longueur)
    dim angle = 30
    if n = 0 then
       Avance(longueur) : recule(longueur)
    else
       Avance(longueur/3)
       Gauche(angle)   : Arbre(n-1,longueur/3*2)
       Droite(2*angle) : Arbre(n-1,longueur/3*2)
       Gauche(angle)   : Recule(longueur/3)
    end_if  
END_SUB
rem ============================================================================
SUB Slalom()
    dim i
    Fpos(x0+300,y0+200)
    for i = 0 to 5000
        Avance(5) : Droite(90*sin(i*Deg2Rad))
    next i
END_SUB
rem ============================================================================
SUB Joggy_Star()
    dim i
    fpos(x0+200,2*y0)
    for i = 0 to 2200
        avance(25*sin(Deg2Rad*i)) : droite(i*i)
    next i
END_SUB
rem ============================================================================
SUB Hexagone()
    dim i,j,k
    origine
    for i = 100 to 10 step -5
        for j = 1 to 6
            for k = 1 to 6 : avance(i) : gauche(60) : next k
            gauche(60)                
        next j
        sleep 100
    next i
END_SUB
rem ==========================================================================
SUB Rosace()
    dim i,j
    Origine
    for i = 1 to 18
        droite(30)
        for j = 1 to 18
            droite(20) : avance(30)
        next j  
        sleep 100        
    next i
END_SUB
rem ============================================================================
SUB Peltonwheel()
    dim i
    Origine
    for i = 0 to 220
        avance(i) : recule(i) : droite(51)
        sleep 10    
    next i
END_SUB
rem ============================================================================
SUB Hairy_Star()
    dim i
    Origine() : fpos(x0+200,y0)
    for i = 0 to 7000
        avance(10) : droite(180*sin(Deg2Rad*i*i))
  '      sleep 1 : ' Pour suivre le tracé. Vous povez la mettre en REM pour un tracé immédiat
    next i
END_SUB
rem ============================================================================
rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
rem ============================================================================
'         *************  Commandes du type LOGO    *********************
rem ============================================================================
rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
rem ============================================================================
' Place la tortue en (xp,yp), le cap n'est pas modifié
SUB fpos(xp,yp)
    x = xp
    y = yp
END_SUB
rem ============================================================================
'  Remet la tortue à l'origine, cap vers le Nord
'  Les angles sont en degrés et sont comptés dans le sens horaire
'  0° (ou 360) correspond à la direction  NORD
' 90°  ---------------------------------- EST
' 180° ---------------------------------- SUD
' 270° ---------------------------------- OUEST
SUB Origine()
    fpos(x0,y0)
    fcap(90)
END_SUB
rem ============================================================================
' Oriente la tortue dans une direction (en degrés)
' Les angles sont comptés dans le sens horaire (l'axe horizontal correspond à 0°)
SUB fcap(angle0)
    angle = angle0  
END_SUB
rem ============================================================================
' Avance de d pixels en dessinant
SUB avance(d)
    dim x2,y2
    x2 = x + d * cos(angle*Deg2Rad)
    y2 = y + d * sin(angle*Deg2Rad)
    plot x,y : draw x2,y2
    x = x2 : y = y2
END_SUB
rem ============================================================================
' Récule de d pixels en dessinant
SUB recule(d)
    avance(-d)
END_SUB
rem ============================================================================
' Tourne à gauche de a degrés
SUB gauche(a)
    angle = angle - a
END_SUB
rem ============================================================================
' Tourne à droite de a degrés
SUB droite(a)
    angle = angle + a
END_SUB
rem ============================================================================
'        *************  Fin Commandes LOGO    *********************          
rem ============================================================================
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

Les programmes de papydall Empty
MessageSujet: Re: Les programmes de papydall   Les programmes de papydall EmptyMer 4 Déc 2019 - 21:52

Bravo pour tes exemples Papydall !

Je crois bien que tu es mordu par le Croco... 
Laughing Laughing Laughing
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Les programmes de papydall Empty
MessageSujet: Re: Les programmes de papydall   Les programmes de papydall EmptyMer 4 Déc 2019 - 22:43

Ou très intéressé, mais c'est caïman pareil !
Revenir en haut Aller en bas
papydall

papydall


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

Les programmes de papydall Empty
MessageSujet: Re: Les programmes de papydall   Les programmes de papydall EmptyMer 4 Déc 2019 - 22:51

Dans les années 1980, j’étais animateur dans un club informatique de l’association tunisienne
« Jeunes & Science ».
On disposait déjà de 8 ordinateurs CPC 64 et 8 autres CPC128.
Le Croco (merci une fois encore à Jack et à Jean_debord) c’est un peu comme un retour à la jeunesse.
J’ai vieilli un peu (même beaucoup) en physique et en activité mentale,  mais je suis toujours un gosse dans ma tête ! tongue

Tu voies bien le lien entre le crocodile et moi.
Spoiler:
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
jean_debord

jean_debord


Nombre de messages : 1249
Age : 69
Localisation : Limoges
Date d'inscription : 21/09/2008

Les programmes de papydall Empty
MessageSujet: Re: Les programmes de papydall   Les programmes de papydall EmptyJeu 5 Déc 2019 - 9:50

Dans les années 80, à la faculté de Pharmacie de Limoges où je travaillais, un professeur avait équipé une salle de travaux pratiques avec des ordinateurs Amstrad.

Je crois me souvenir qu'un étudiant avait fait sa thèse en concevant un programme pour cette machine.

A part ça, merci pour cette nouvelle contribution.

Et quant aux fonctions graphiques FLTK, elles sont caïman... euh, quasiment au point. Ce sera dans la prochaine version.
Revenir en haut Aller en bas
http://www.unilim.fr/pages_perso/jean.debord/index.htm
papydall

papydall


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

Les programmes de papydall Empty
MessageSujet: Re: Les programmes de papydall   Les programmes de papydall EmptyVen 6 Déc 2019 - 4:39

Salut Jean.

Je continue avec le Croco.

Code:

rem =================================================================
dim p,x,y

mode 3, "QUAND UN SINUS RENCONTRE UN COSINUS, ILS FONT LA BELLE",1000,800 : origin 500,400
p = pi/180
for x = -3*pi to 3*pi step p
   for y = -3*pi to 3*pi step p
       if cos(4*x) * cos(2*sqr(2)*(x-y)) * cos(4*y)*cos(2*sqr(2)*(x+y)) < 0 then
     ' if int(sin(x)+sin(y+sin(x))) = int(sin(y)+sin(x+sin(y))) then
     ' if cos(sin(x+sin(y+cos(x+sin(y)))) - cos(y+cos(x+sin(y+cos(x))))) > .999 then
     ' if (sin(y)*cos(x)-sin(x))*(sin(x)*cos(y)-sin(y)) > 0 : then
     ' if sin(x)*sin(y) >= cos(x)+cos(y) then
          pen rgb(255,255,0)
       else
          pen rgb(255,0,0)
       end_if
       plot 50*x,40*y      
   next y
next x

while inkey() = "" : wend
end
rem ====================================================================
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Contenu sponsorisé





Les programmes de papydall Empty
MessageSujet: Re: Les programmes de papydall   Les programmes de papydall Empty

Revenir en haut Aller en bas
 
Les programmes de papydall
Revenir en haut 
Page 1 sur 8Aller à la page : 1, 2, 3, 4, 5, 6, 7, 8  Suivant
 Sujets similaires
-
» Welcome Papydall
» Bienvenue à PRO Positif Plus !
» Lister les polices disponibles sur votre ordinateur
» Les Papillons de Papydall
» Pour PAPYDALL

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: Expériences autour de PANORAMIC :: Crocodile Basic-
Sauter vers: