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
» Fonctionnement du caret_x_position(N)
par Jack Hier à 20:36

» Problèmes en cours.
par Jack Hier à 20:31

» PanExpress : l'éditeur Panoramic avec création d'objet
par Minibug Hier à 19:55

» Exemple d'une nouvelle version d'un GRID
par Minibug Hier à 17:36

» Comment faire fonctionner \qj en RTF ?
par jjn4 Mer 12 Déc 2018 - 19:25

» Mais où est donc passé Klaus ?!
par Jicehel Mer 12 Déc 2018 - 13:38

» Problème avec SaveStringList.
par Klaus Mer 12 Déc 2018 - 12:14

» Je suis de retour !
par Klaus Mer 12 Déc 2018 - 12:10

» Connexion au forum
par mindstorm Mer 5 Déc 2018 - 19:09

» Version instantanée V 0.9.29i5 du 17/11/2018
par silverman Ven 30 Nov 2018 - 10:37

» imprimer avec Print.dll
par JL35 Jeu 29 Nov 2018 - 21:33

» Convertisseur Décimal ---> Binaire, Octal, Hexadécimal, ...
par Minibug Dim 25 Nov 2018 - 15:37

» Impression de documents
par JL35 Ven 23 Nov 2018 - 19:45

» Logiciel de soutien scolaire.
par Marc Jeu 22 Nov 2018 - 20:51

» Logiciel de soutien en langues.
par Marc Jeu 22 Nov 2018 - 19:39

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Décembre 2018
LunMarMerJeuVenSamDim
     12
3456789
10111213141516
17181920212223
24252627282930
31      
CalendrierCalendrier

Partagez | 
 

 Dessin 2D: largeur de trait (résolu !)

Aller en bas 
Aller à la page : Précédent  1, 2
AuteurMessage
papydall

avatar

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

MessageSujet: Re: Dessin 2D: largeur de trait (résolu !)   Ven 22 Juin 2018 - 16:57

JL trente cinq a écrit:
Y a-t'il moyen de connaître la largeur de trait courante (fixée par 2D_PEN_WIDTH n) ?



As-tu d’autres questions ? Question
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
JL35



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

MessageSujet: Re: Dessin 2D: largeur de trait (résolu !)   Ven 22 Juin 2018 - 17:23

Tu es en train de me suggérer discrètement que le problème est résolu, c'est bien ça papydall ?
Bon, d'accord, je le classe...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

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

MessageSujet: Re: Dessin 2D: largeur de trait (résolu !)   Sam 23 Juin 2018 - 0:06

Les intelligents se comprennent au clin d’œil !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
JL35



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

MessageSujet: Re: Dessin 2D: largeur de trait (résolu !)   Sam 23 Juin 2018 - 9:45

Évidemment ! la classe ! Very Happy

Je n'ai pas d'autres questions, mais j'espérais vaguement avoir d'autres réponses, une astuce originale par exemple. Mais bon, les solutions proposées me conviennent, et on va en rester là.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Dessin 2D: largeur de trait (résolu !)   Sam 23 Juin 2018 - 15:36

Résolu, mais pas terminé !
Bon papydall et consorts, pour la petite histoire, pourquoi j'avais besoin de l'épaisseur du trait:
- Je trace un arc d'ellipse fermé (ici entre 120 et 180 degrés):

- Je veux colorer l'intérieur de la figure: j'ai besoin des coordonnées d'un point à l'intérieur.
Je sais me positionner au milieu de l'arc, côté intérieur, mais je dois être sûr de ne pas me trouver
sur le trait du tracé, donc je dois chercher le point juste au_dessous du trait.

Dans l'exemple ci-dessous (qui a servi à tracer la figure), je me mets arbitrairement 10 pixels au-dessous, mais c'est plutôt empirique...
Code:
DIM xc%,yc%,w%,h%,d%,f%,rgb%,ff%
PICTURE 1: FULL_SPACE 1: 2D_TARGET_IS 1
2D_PEN_WIDTH 10: 2D_PEN_COLOR 255,0,0
xc% = WIDTH(1)/2: yc% = HEIGHT(1)/2
w% = WIDTH(1)-25: h% = HEIGHT(1)-50
d% = 0: f% = 45: ' degrés
ff% = 0
Ellipse_arc(xc%,yc%,w%,h%,d%,f%,rgb%,ff%)
END

SUB Ellipse_arc(xc%,yc%,w%,h%,d%,f%,rgb%,ff%)
  ' Tracé d'un arc d'une ellipse vide centrée en xc%,yc% de la cible 2d
  ' w%, h%: enveloppe de l'ellipse complète.
  ' Début d% degrés, fin f% degrés (de 0 à 360 degrés dans le sens trigonométrique)
  ' Ellipse complète si f% = d%
  ' Si rgb% <> -1, couleur de remplissage = rgb% (r*256*256+g*256+b)
  ' Si ff% = 1: figure fermée (fin de tracé reliée au début par un trait: arc d'ellipse)
  ' Tracé de la couleur courante et de l'épaisseur (1 à 20) courante
  DIM_LOCAL rx%,ry%,xdp%,ydp%,xf%,yf%,p%,t%,r%,g%,b%
  rx% = w%/2: ry% = h%/2: ' rayons de l'ellipse
  IF f% = d% THEN d% = 0: f% = 360: ff% = 1: ' ellipse complète
  DEGREES
  p% = 5: ' pas = 5 degrés
  xdp% = xc%+rx%*COS(d%): ydp% = yc%-ry%*SIN(d%): ' point de départ du tracé
  2D_POLY_FROM xdp%,ydp%
  IF d% > f%
      FOR t% = d% TO 360 STEP p%
          2D_POLY_TO xc%+rx%*COS(t%),yc%-ry%*SIN(t%)
      NEXT t%
      d% = 0
  END_IF
  FOR t% = d% TO f% STEP p%
      2D_POLY_TO xc%+rx%*COS(t%),yc%-ry%*SIN(t%)
  NEXT t%
  2D_POLY_TO xc%+rx%*COS(f%),yc%-ry%*SIN(f%)
  IF ff% = 1 THEN 2D_POLY_TO xdp%,ydp%: ' fermeture de l'arc
  IF rgb%<>-1 AND ff% = 1: ' coloriage figure fermée (secteur ou ellipse entière)
      t% = (f%+d%)/2: xf% = xc%+(rx%-10)*COS(t%): yf% = yc%-(ry%-10)*SIN(t%)
      r% = INT(rgb%/65536): g% = BIN_AND(rgb%,65280)/256: b% = BIN_AND(rgb%,255)
      2D_FLOOD xf%,yf%,r%,g%,b%
  END_IF
END_SUB

Disons que le problème est réglé, mais ça ne vaut pas une simple instruction qui dirait w = 2D_PEN_WIDTH(N) ! Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Marc

avatar

Nombre de messages : 993
Age : 57
Localisation : TOURS
Date d'inscription : 17/03/2014

MessageSujet: Re: Dessin 2D: largeur de trait (résolu !)   Dim 24 Juin 2018 - 1:03

Bonjour à tous !
Salut JL35 !

JL35 a écrit:
Résolu, mais pas terminé !

Je me permets de rouvrir ce sujet.
Si tu veux connaitre le centre de la forme créée pour la colorier, tu appliques ces formules :

en reprenant tes noms de variables :

Code:
xf% = (rx%*COS((d%+f%)/2) +(rx%*COS(d%)+rx%*COS(f%))/2)/2 + xc%
yf% = (ry%*SIN((d%+f%)/2) +(ry%*SIN(d%)+ry%*SIN(f%))/2)/-2 + yc%
2D_FLOOD xf%,yf%,r%,g%,b%

Voici ton code modifié (lignes 38 et 39) :

Code:
DIM xc%,yc%,w%,h%,d%,f%,rgb%,ff%
PICTURE 1: FULL_SPACE 1: 2D_TARGET_IS 1
2D_PEN_WIDTH 10: 2D_PEN_COLOR 255,0,0
xc% = WIDTH(1)/2: yc% = HEIGHT(1)/2
w% = WIDTH(1)-25: h% = HEIGHT(1)-50
d% = 0: f% = 45: ' degrés
ff% = 1
Ellipse_arc(xc%,yc%,w%,h%,d%,f%,rgb%,ff%)
END

SUB Ellipse_arc(xc%,yc%,w%,h%,d%,f%,rgb%,ff%)
  ' Tracé d'un arc d'une ellipse vide centrée en xc%,yc% de la cible 2d
  ' w%, h%: enveloppe de l'ellipse complète.
  ' Début d% degrés, fin f% degrés (de 0 à 360 degrés dans le sens trigonométrique)
  ' Ellipse complète si f% = d%
  ' Si rgb% <> -1, couleur de remplissage = rgb% (r*256*256+g*256+b)
  ' Si ff% = 1: figure fermée (fin de tracé reliée au début par un trait: arc d'ellipse)
  ' Tracé de la couleur courante et de l'épaisseur (1 à 20) courante
  DIM_LOCAL rx%,ry%,xdp%,ydp%,xf%,yf%,p%,t%,r%,g%,b%
  rx% = w%/2: ry% = h%/2: ' rayons de l'ellipse
  IF f% = d% THEN d% = 0: f% = 360: ff% = 1: ' ellipse complète
  DEGREES
  p% = 5: ' pas = 5 degrés
  xdp% = xc%+rx%*COS(d%): ydp% = yc%-ry%*SIN(d%): ' point de départ du tracé
  2D_POLY_FROM xdp%,ydp%
  IF d% > f%
      FOR t% = d% TO 360 STEP p%
          2D_POLY_TO xc%+rx%*COS(t%),yc%-ry%*SIN(t%)
      NEXT t%
      d% = 0
  END_IF
  FOR t% = d% TO f% STEP p%
      2D_POLY_TO xc%+rx%*COS(t%),yc%-ry%*SIN(t%)
  NEXT t%
  2D_POLY_TO xc%+rx%*COS(f%),yc%-ry%*SIN(f%)
  IF ff% = 1 THEN 2D_POLY_TO xdp%,ydp%: ' fermeture de l'arc
  IF rgb%<>-1 AND ff% = 1: ' coloriage figure fermée (secteur ou ellipse entière)
      xf% = (rx%*COS((d%+f%)/2) +(rx%*COS(d%)+rx%*COS(f%))/2)/2 + xc%
      yf% = (ry%*SIN((d%+f%)/2) +(ry%*SIN(d%)+ry%*SIN(f%))/2)/-2 + yc%
      r% = INT(rgb%/65536): g% = BIN_AND(rgb%,65280)/256: b% = BIN_AND(rgb%,255)
      2D_FLOOD xf%,yf%,r%,g%,b%
  END_IF
END_SUB

ce qui donne :



Plus besoin de connaitre l'épaisseur du trait Very Happy
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Dessin 2D: largeur de trait (résolu !)   Dim 24 Juin 2018 - 1:37

Marc, c'est toi le plus fort !
Je testerai plus en détail demain (là il se fait un peu tard), mais a priori ta solution est géniale !
Merci à toi.
En regardant d'un peu plus près, il semble bien que ça convienne à tous les cas, j'adopte !


Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Dessin 2D: largeur de trait (résolu !)   Dim 24 Juin 2018 - 11:04

Quoique... ça ne marche pas à tous les coups.

Avec le code ci-dessus, essaie d% = 240 et f% = 10 degrés... ça colore le trait, mais pas l'intérieur.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Marc

avatar

Nombre de messages : 993
Age : 57
Localisation : TOURS
Date d'inscription : 17/03/2014

MessageSujet: Re: Dessin 2D: largeur de trait (résolu !)   Dim 24 Juin 2018 - 11:52

Désolé !

Effectivement si d% > f% ça ne marche pas.

Ajoute une condition en ligne 23 :
Code:
 IF d%>f% THEN d%=d%-360

Nouveau code :

Code:
DIM xc%,yc%,w%,h%,d%,f%,rgb%,ff%
PICTURE 1: FULL_SPACE 1: 2D_TARGET_IS 1
2D_PEN_WIDTH 10: 2D_PEN_COLOR 255,0,0
xc% = WIDTH(1)/2: yc% = HEIGHT(1)/2
w% = WIDTH(1)-25: h% = HEIGHT(1)-50
d% = 10: f% = 240: ' degrés
ff% = 1
Ellipse_arc(xc%,yc%,w%,h%,d%,f%,rgb%,ff%)
END

SUB Ellipse_arc(xc%,yc%,w%,h%,d%,f%,rgb%,ff%)
  ' Tracé d'un arc d'une ellipse vide centrée en xc%,yc% de la cible 2d
  ' w%, h%: enveloppe de l'ellipse complète.
  ' Début d% degrés, fin f% degrés (de 0 à 360 degrés dans le sens trigonométrique)
  ' Ellipse complète si f% = d%
  ' Si rgb% <> -1, couleur de remplissage = rgb% (r*256*256+g*256+b)
  ' Si ff% = 1: figure fermée (fin de tracé reliée au début par un trait: arc d'ellipse)
  ' Tracé de la couleur courante et de l'épaisseur (1 à 20) courante
  DIM_LOCAL rx%,ry%,xdp%,ydp%,xf%,yf%,p%,t%,r%,g%,b%
  rx% = w%/2: ry% = h%/2: ' rayons de l'ellipse
  IF f% = d% THEN d% = 0: f% = 360: ff% = 1: ' ellipse complète
  DEGREES
  IF d%>f% THEN d%=d%-360
  p% = 5: ' pas = 5 degrés
  xdp% = xc%+rx%*COS(d%): ydp% = yc%-ry%*SIN(d%): ' point de départ du tracé
  2D_POLY_FROM xdp%,ydp%
  IF d% > f%
      FOR t% = d% TO 360 STEP p%
          2D_POLY_TO xc%+rx%*COS(t%),yc%-ry%*SIN(t%)
      NEXT t%
      d% = 0
  END_IF
  FOR t% = d% TO f% STEP p%
      2D_POLY_TO xc%+rx%*COS(t%),yc%-ry%*SIN(t%)
  NEXT t%
  2D_POLY_TO xc%+rx%*COS(f%),yc%-ry%*SIN(f%)
  IF ff% = 1 THEN 2D_POLY_TO xdp%,ydp%: ' fermeture de l'arc
  IF rgb%<>-1 AND ff% = 1: ' coloriage figure fermée (secteur ou ellipse entière)
      xf% = (rx%*COS((d%+f%)/2) +(rx%*COS(d%)+rx%*COS(f%))/2)/2 + xc%
      yf% = (ry%*SIN((d%+f%)/2) +(ry%*SIN(d%)+ry%*SIN(f%))/2)/-2 + yc%
      r% = INT(rgb%/65536): g% = BIN_AND(rgb%,65280)/256: b% = BIN_AND(rgb%,255)
      2D_FLOOD xf%,yf%,r%,g%,b%
  END_IF
END_SUB

Est-ce bon ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Dessin 2D: largeur de trait (résolu !)   Dim 24 Juin 2018 - 12:21

Effectivement, avec le test c'est mieux, et il semble bien que ça marche dans tous les cas de figures, puisque les calculs admettent des valeurs d'angles négatives.

Allez, n'ayons pas peur des mots, disons que c'est parfait.

Merci Marc, j'enregistre.

ps, du coup ma séquence au-dessous de ton nouveau test:
Code:
 IF d% > f%
      FOR t% = d% TO 360 STEP p%
          2D_POLY_TO xc%+rx%*COS(t%),yc%-ry%*SIN(t%)
      NEXT t%
      d% = 0
  END_IF
ne sert plus à rien, je la supprime.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

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

MessageSujet: Re: Dessin 2D: largeur de trait (résolu !)   Dim 24 Juin 2018 - 12:39

JL35 a écrit:
Allez, n'ayons pas peur des mots, disons que c'est parfait.

Hé ! Jeune homme, ne crie pas VICTOIRE assez tôt !

Et si le petit malin ( qui sommeille dans la tête de Papydall ) essaie le code avec une valeur de 570 pour f% , on obtient

Spoiler:
 

Pour contrer ce petit méchant, il faut ajourer la ligne suivante
Code:

f% = wrap_value(f%)


Avant la condition

Code:

IF f% = d% THEN d% = 0: f% = 360: ff% = 1: ' ellipse complète



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

avatar

Nombre de messages : 993
Age : 57
Localisation : TOURS
Date d'inscription : 17/03/2014

MessageSujet: Re: Dessin 2D: largeur de trait (résolu !)   Dim 24 Juin 2018 - 12:50

Salut Papydall !

Idem pour d% !

Si on dépasse les 360°, on fait le tour du cadran !
De quoi avoir la tête qui tourne !
Il suffit d'essayer avec d%=600 par exemple.

Donc, même punition pour d%.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

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

MessageSujet: Re: Dessin 2D: largeur de trait (résolu !)   Dim 24 Juin 2018 - 13:06

Avant de crier victoire, voici le code modifié.
Il devrait se comporter gentiment à tous les coups, mais sait-on jamais ?


Code:

DIM xc%,yc%,w%,h%,d%,f%,rgb%,ff%
PICTURE 1: FULL_SPACE 1: 2D_TARGET_IS 1
2D_PEN_WIDTH 10: 2D_PEN_COLOR 255,0,0
xc% = WIDTH(1)/2: yc% = HEIGHT(1)/2
w% = WIDTH(1)-25: h% = HEIGHT(1)-50
d% = 1010: f% = 570: ' degrés
ff% = 1
Ellipse_arc(xc%,yc%,w%,h%,d%,f%,rgb%,ff%)
END

SUB Ellipse_arc(xc%,yc%,w%,h%,d%,f%,rgb%,ff%)
  ' Tracé d'un arc d'une ellipse vide centrée en xc%,yc% de la cible 2d
  ' w%, h%: enveloppe de l'ellipse complète.
  ' Début d% degrés, fin f% degrés (de 0 à 360 degrés dans le sens trigonométrique)
  ' Ellipse complète si f% = d%
  ' Si rgb% <> -1, couleur de remplissage = rgb% (r*256*256+g*256+b)
  ' Si ff% = 1: figure fermée (fin de tracé reliée au début par un trait: arc d'ellipse)
  ' Tracé de la couleur courante et de l'épaisseur (1 à 20) courante
  DIM_LOCAL rx%,ry%,xdp%,ydp%,xf%,yf%,p%,t%,r%,g%,b%
  rx% = w%/2: ry% = h%/2: ' rayons de l'ellipse  
  f% = wrap_value(f%) : d% = wrap_value(d%)
  IF f% = d% THEN d% = 0: f% = 360: ff% = 1: ' ellipse complète
  DEGREES
  IF d%>f% THEN d%=d%-360
  p% = 5: ' pas = 5 degrés
  xdp% = xc%+rx%*COS(d%): ydp% = yc%-ry%*SIN(d%): ' point de départ du tracé
  2D_POLY_FROM xdp%,ydp%

  FOR t% = d% TO f% STEP p%
      2D_POLY_TO xc%+rx%*COS(t%),yc%-ry%*SIN(t%)
  NEXT t%
  2D_POLY_TO xc%+rx%*COS(f%),yc%-ry%*SIN(f%)
  IF ff% = 1 THEN 2D_POLY_TO xdp%,ydp%: ' fermeture de l'arc
  IF rgb%<>-1 AND ff% = 1: ' coloriage figure fermée (secteur ou ellipse entière)
      xf% = (rx%*COS((d%+f%)/2) +(rx%*COS(d%)+rx%*COS(f%))/2)/2 + xc%
      yf% = (ry%*SIN((d%+f%)/2) +(ry%*SIN(d%)+ry%*SIN(f%))/2)/-2 + yc%
      r% = INT(rgb%/65536): g% = BIN_AND(rgb%,65280)/256: b% = BIN_AND(rgb%,255)
      2D_FLOOD xf%,yf%,r%,g%,b%
  END_IF
END_SUB
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
JL35



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

MessageSujet: Re: Dessin 2D: largeur de trait (résolu !)   Dim 24 Juin 2018 - 13:51

Évidemment papydall, à force de chercher la petite bête tu as fini par la trouver !

Après quelques essais de principe, je considère que ton code résout tous les problèmes, et je l'adopte.
Quand même, que de pièges, mis à part le fait que certains testeurs vicieux (je ne nomme personne) infligent au programme des angles supérieurs à 360 ! quelle idée saugrenue !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5938
Age : 46
Localisation : 77500
Date d'inscription : 18/04/2011

MessageSujet: Re: Dessin 2D: largeur de trait (résolu !)   Dim 24 Juin 2018 - 15:16

Les testeurs vicieux sont les meilleurs testeurs. Bravo aux testeurs vicieux et bravo pour ce bout de code qui résiste à leurs tests Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Dessin 2D: largeur de trait (résolu !)   

Revenir en haut Aller en bas
 
Dessin 2D: largeur de trait (résolu !)
Revenir en haut 
Page 2 sur 2Aller à la page : Précédent  1, 2
 Sujets similaires
-
» largeur de trace
» [résolu] Epaisseur du trait représentant une trace
» [résolu]pc infecté par wwwzuc32.exe
» [ résolu ]à propos de TFC
» Optimisation sécurité PC [Résolu]

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: A l'aide!-
Sauter vers: