PureBasic

Forums PureBasic
Nous sommes le Lun 17/Juin/2019 1:56

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 56 messages ]  Aller à la page 1, 2, 3, 4  Suivante
Auteur Message
 Sujet du message: Des cercles a dessiner sans "circle"
MessagePosté: Dim 21/Avr/2019 18:02 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 3957
Salut,

voici un code banal pour faire des cercles concentriques :
Code:
;
; ------------------------------------------------------------
;
;   PureBasic - Windowed Screen example file
;
;    (c) Fantaisie Software
;
; ------------------------------------------------------------
;

If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
  MessageRequester("Error", "Can't open the sprite system", 0)
  End
EndIf

If OpenWindow(0, 0, 0, 600, 600, "Cercle",#PB_Window_ScreenCentered)
 
  If OpenWindowedScreen(WindowID(0), 10, 10, 580, 580, 0, 0, 0)
   
   
  TempsDepart.q = ElapsedMilliseconds()  ; Récupère la valeur actuelle
 
    StartDrawing(ScreenOutput())
      DrawingMode(#PB_2DDrawing_Outlined)

    For r= 10 To 260 Step 10
     
      Circle(290,290,r)
     
    Next
   
    StopDrawing()
   
   
    FlipBuffers()       ; Inverse the buffers (the back become the front (visible)... and we can do the rendering on the back
   
  TempsEcoule.q = ElapsedMilliseconds()-TempsDepart
MessageRequester("timer",Str(TempsEcoule))   
   
    Repeat
      ExamineKeyboard()
    Until KeyboardPushed(#PB_Key_Escape)
   
  Else
    MessageRequester("Error", "Can't open windowed screen!", 0)
  EndIf
EndIf



Timer entre 10 et 15 ms :idea:


Mais, sauriez vous faire la meme chose sans l'innstruction "circle" ?

Mon code :
Code:
;
;
; ------------------------------------------------------------
;
;   PureBasic - Windowed Screen example file
;
;    (c) Fantaisie Software
;
; ------------------------------------------------------------
;

If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
  MessageRequester("Error", "Can't open the sprite system", 0)
  End
EndIf

If OpenWindow(0, 0, 0, 600, 600, "Cercle",#PB_Window_ScreenCentered)
 
  If OpenWindowedScreen(WindowID(0), 10, 10, 580, 580, 0, 0, 0)
   
   
  TempsDepart.q = ElapsedMilliseconds()  ; Récupère la valeur actuelle
   
    StartDrawing(ScreenOutput())
   
    For r= 10 To 260 Step 10
      ;r=260
      rr.f=2*r*3.14159535
     
      ;z.f=360*8/rr
      z.f=360/rr
      u.f=0
     
      ok=0
     
      Repeat
       
        u+z
        If u>=360
          ok=1
        EndIf
       
        x.f=Cos(Radian(u))*r
        y.f=Sin(Radian(u))*r
       
        ;LineXY(290+x,290+y,290+x2,290+y2,RGB(88,88,88))
        Plot(290+x,290+y,RGB(255,0,0))
       
       
      Until ok=1
     
    Next
   
    StopDrawing()
   
   
    FlipBuffers()       ; Inverse the buffers (the back become the front (visible)... and we can do the rendering on the back
   
  TempsEcoule.q = ElapsedMilliseconds()-TempsDepart
MessageRequester("timer",Str(TempsEcoule))   
   
    Repeat
      ExamineKeyboard()
    Until KeyboardPushed(#PB_Key_Escape)
   
  Else
    MessageRequester("Error", "Can't open windowed screen!", 0)
  EndIf
EndIf



Timer entre 24 et 26 ms :wink:

_________________
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Portable LENOVO ideapad 110-17ACL 64 bits
Version de PB : 5.70LTS - 32 bits


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Des cercles a dessiner sans "circle"
MessagePosté: Dim 21/Avr/2019 21:25 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 3957
Une petite variante qui grapille quelques ms :

Code:
;
; ------------------------------------------------------------
;
;   PureBasic - Windowed Screen example file
;
;    (c) Fantaisie Software
;
; ------------------------------------------------------------
;

If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
  MessageRequester("Error", "Can't open the sprite system", 0)
  End
EndIf

If OpenWindow(0, 0, 0, 600, 600, "Cercle",#PB_Window_ScreenCentered)
 
  If OpenWindowedScreen(WindowID(0), 10, 10, 580, 580, 0, 0, 0)
   
   
    TempsDepart.q = ElapsedMilliseconds()  ; Récupère la valeur actuelle
   
    StartDrawing(ScreenOutput())
   
    For r= 10 To 260 Step 10
      ;r=260
      rr.f=2*r*3.14159535
     
      ;z.f=360*8/rr
      z.f=360/rr
      u.f=0
     
      ok=0
     
      Repeat
       
       
        x.f=Cos(Radian(u))*r
        y.f=Sin(Radian(u))*r
       
        Plot(290+x,290+y,RGB(255,0,0))
        Plot(290-x,290+y,RGB(255,0,0))
        Plot(290+x,290-y,RGB(255,0,0))
        Plot(290-x,290-y,RGB(255,0,0))
       
        u+z
        If u>90
          ok=1
        EndIf
       
      Until ok=1
     
    Next
   
    StopDrawing()
   
   
    FlipBuffers()       ; Inverse the buffers (the back become the front (visible)... and we can do the rendering on the back
   
    TempsEcoule.q = ElapsedMilliseconds()-TempsDepart
    MessageRequester("timer",Str(TempsEcoule))   
   
    Repeat
      ExamineKeyboard()
    Until KeyboardPushed(#PB_Key_Escape)
   
  Else
    MessageRequester("Error", "Can't open windowed screen!", 0)
  EndIf
EndIf


_________________
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Portable LENOVO ideapad 110-17ACL 64 bits
Version de PB : 5.70LTS - 32 bits


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Des cercles a dessiner sans "circle"
MessagePosté: Dim 21/Avr/2019 22:43 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3414
Moi j'ai une milliseconde (27 millions de cycles).

_________________
Juste la 4G pour Smartphone


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Des cercles a dessiner sans "circle"
MessagePosté: Dim 21/Avr/2019 22:59 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 3957
Ollivier a écrit:
Moi j'ai une milliseconde (27 millions de cycles).

De qui, de où, de quand ??

_________________
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Portable LENOVO ideapad 110-17ACL 64 bits
Version de PB : 5.70LTS - 32 bits


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Des cercles a dessiner sans "circle"
MessagePosté: Lun 22/Avr/2019 7:40 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6853
Localisation: IDF (Yvelines)
Ollivier a écrit:
Moi j'ai une milliseconde (27 millions de cycles).
Tu attends l'affichage de la prochaine milliseconde ? :mrgreen:

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat & http://purebasic.chat/forum

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Des cercles a dessiner sans "circle"
MessagePosté: Lun 22/Avr/2019 11:23 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3414
Ton screen, avec option Smart Synchro (cf Doc)
Ton sprite, avec option Alphablending (cf Doc)
Ton drawing, avec option All Channels (cf Doc)

Et tu utilises la couche alpha pour faire un gruyère dans ton disque.


Code:
Procedure DisplayCircle(cx, cy, Radius.D, SpriteN)
    x1 = Radius
    Angle.D = 0.0
    Repeat
        Angle + 0.12564
        x0 = x1
        y0 = y1
        x1 = Cos(Angle) * Radius
        y1 = Sin(Angle) * Radius
        TransformSprite(SpriteN, 0, 0, x0, y0, x1, y1, 0, 0)
        DisplayTransparentSprite(SpriteN, cx, cy)
    Until Angle => 6.283 - 0.12564
EndProcedure

_________________
Juste la 4G pour Smartphone


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Des cercles a dessiner sans "circle"
MessagePosté: Lun 22/Avr/2019 11:46 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 3957
Je suis désolé Ollivier mais je ne vois pas ce qu'un sprite viens faire dans ta routine. De plus, ta routine est bien belle, mais peut tu donner l'integralité de ton code qui trace des cercles ?

:arrow: :|

_________________
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Portable LENOVO ideapad 110-17ACL 64 bits
Version de PB : 5.70LTS - 32 bits


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Des cercles a dessiner sans "circle"
MessagePosté: Lun 22/Avr/2019 12:04 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3414
Quand tu as créé ton screen, tu mets ça :
Code:
Sprite = CreateSprite(#PB_Any, 2, 1, #PB_Sprite_Alphablending)
If StartDrawing(SpriteOutput(Sprite) )
    DrawingMode(#PB_2DDrawing_AllChannels)
    W = OutputWidth()
    H = OutputHeight()
    Box(0, 0, W, H, RGBA(0, 0, 0, 0) )
    Plot(1, 0, RGBA(255, 255, 255, 255) )
    StopDrawing()
EndIf

C'est un sprite de 2 pixels.

Ensuite, tu copie la procédure donnée plus haut. Et dans ta boucle d'affichage, tu dessines ton cercle :
Code:
DisplayCircle(200, 200, 50, Sprite)
Tu peux en faire plein : ça utilise peu le CPU donc c'est nettement plus rapide.

_________________
Juste la 4G pour Smartphone


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Des cercles a dessiner sans "circle"
MessagePosté: Lun 22/Avr/2019 14:36 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 3957
Marche pas ton truc... :roll:

_________________
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Portable LENOVO ideapad 110-17ACL 64 bits
Version de PB : 5.70LTS - 32 bits


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Des cercles a dessiner sans "circle"
MessagePosté: Lun 22/Avr/2019 14:57 
Hors ligne

Inscription: Lun 30/Aoû/2004 21:03
Messages: 88
Le problème de ta routine c'est que les cercles sont beaucoup moins beaux que ceux créés par la fonction circle.

_________________
http://crisot.com/odyssey
http://crisot.com/dev


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Des cercles a dessiner sans "circle"
MessagePosté: Lun 22/Avr/2019 15:22 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 29/Juil/2004 16:33
Messages: 2741
Localisation: Klyntar
crisot a écrit:
Le problème de ta routine c'est que les cercles sont beaucoup moins beaux que ceux créés par la fonction circle.


En même temps, sph a demander des cercles sans la fonction cercle. Il n'a pas parler de perfect circle :lol:







@++

_________________
Windows 10 x64, PureBasic 5.71 Beta 1 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Des cercles a dessiner sans "circle"
MessagePosté: Lun 22/Avr/2019 16:20 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3414
SPH a écrit:
Marche pas ton truc... :roll:
Remplace Plot(1, etc... par Plot(0, etc... et ça va marcher.

Faut vraiment te tirer les vers du nez...

_________________
Juste la 4G pour Smartphone


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Des cercles a dessiner sans "circle"
MessagePosté: Lun 22/Avr/2019 16:25 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 3957
Beaucoup moins beaux ?

Il n'y a pas plus rond qu'un cercle tracé point par point avec un cos et un sin.

Peut etre as tu vu ma vieille routine ou j'interpolais les points séparé par des line. La, c'etait moche :idea:

_________________
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Portable LENOVO ideapad 110-17ACL 64 bits
Version de PB : 5.70LTS - 32 bits


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Des cercles a dessiner sans "circle"
MessagePosté: Lun 22/Avr/2019 16:27 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3414
Nyé mynerve le SPicHe !

_________________
Juste la 4G pour Smartphone


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Des cercles a dessiner sans "circle"
MessagePosté: Lun 22/Avr/2019 16:31 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 3957
Ollivier a écrit:

J'ai essayé tes routines. Elles ne marchent pas.
Au lieu de dire "remplace ca par ca" et surtout "met ca la" et tout et tout, pourquoi tu ne ponds pas un code complet ? :|

_________________
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Portable LENOVO ideapad 110-17ACL 64 bits
Version de PB : 5.70LTS - 32 bits


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 56 messages ]  Aller à la page 1, 2, 3, 4  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  
cron

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye