Paint Plot

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Old_Shark
Messages : 20
Inscription : sam. 13/déc./2008 1:40
Localisation : Belgique

Message par Old_Shark »

@Cpl.Bator

Si tu mets RGB(0,0,0) (noir), tu verras qu'il reste des pixels de la couleur de fond de la fenêtre (gris).
C’est la preuve que les coordonnées ne passent pas par tout les pixels de la fenêtre.

@djes

Explicite oui ! Mais ça devient dur :)

Un pixel est dessiné au centre de la fenêtre.
Ensuite, on trace des pixels autour.
Ainsi de suite, jusqu’au bord de la fenêtre.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Old_Shark a écrit : Un pixel est dessiné au centre de la fenêtre.
Ensuite, on trace des pixels autour.
Ainsi de suite, jusqu’au bord de la fenêtre.
mon listing contien toutes les procedures pour faire ça !! :? :wink:
Old_Shark
Messages : 20
Inscription : sam. 13/déc./2008 1:40
Localisation : Belgique

Message par Old_Shark »

Non ! J’ai déjà expliqué le pourquoi.
Old_Shark
Messages : 20
Inscription : sam. 13/déc./2008 1:40
Localisation : Belgique

Message par Old_Shark »

J'ai trouvé ça, si ça peut aider.

http://techno-science.net/illustration/ ... e-plan.jpg
Image
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

C'est à la portée de n'importe qui ce que tu demandes... :roll:
Anonyme

Message par Anonyme »

Code : Tout sélectionner

Procedure dessine()
  StartDrawing(WindowOutput(0))
 
  CenterX.f = WindowWidth(0) / 2
  CenterY.f = WindowHeight(0) / 2
  Distance.f =    Sqr((CenterX*CenterX)  + (CenterY*CenterY))                 
  
For Rayon = Distance To 0 Step -1
         Color = 255 -((Rayon*255)/Distance)
         Circle(CenterX,CenterY,Rayon,RGB(Color,Color,Color))
Next
   
  StopDrawing()
EndProcedure

OpenWindow(0,0,0,400,400,"test")
Repeat
dessine()
Until WaitWindowEvent()=#PB_Event_CloseWindow

Veut tu le faire de manière progressive ?
Old_Shark
Messages : 20
Inscription : sam. 13/déc./2008 1:40
Localisation : Belgique

Message par Old_Shark »

Avec Box, c'est encore plus simple.

et avec Plot ?
Anonyme

Message par Anonyme »

T'es pas chié toi... t'es pas foutu de pondre un algo avec ca ?
tu pouvais pas parlé de spirale dès le début au lieu de nous faire perdre notre temps ?
Old_Shark
Messages : 20
Inscription : sam. 13/déc./2008 1:40
Localisation : Belgique

Message par Old_Shark »

Au début, j'avais des craintes sur l'énoncé du problème.

À mon troisième poste, le mot spiral a été prononcé.

Et il y a Plot dans le titre du sujet, pas Circle.

Je suis désolé de te faire perdre ton temps et d'avoir posé une question de débutant dans un forum pour débutant.
Anonyme

Message par Anonyme »

Old_Shark a écrit :Trop facile :roll:
Old_Shark a écrit :Avec Box, c'est encore plus simple.

et avec Plot ?

On est pas tes chiens , de la politesse s'impose , surtout si tu débutes , je ne suis pas arrivé ici , en demandant du code prémaché... , en plus ton dessin te donne la réponse... , donc je déduis que t'es un manche impoli , comme je ne suis pas un con , je te donne ce que je viens de faire , tu te démerdes pour l'adpater à tes besoin.
Old_Shark a écrit :Trop facile :roll:

Code : Tout sélectionner


#LEFT = $0001
#RIGHT = $0010
#UP = $0100
#DOWN = $1000


Procedure DrawSpiral()

Plot(640/2,480/2,$FF00FF)

 KickCounter.l=1
 Kick.l
 Direction.l = #LEFT
 X.l
 Y.l

For Depth = 1 To 500

KickCounter + 1
If KickCounter=2
	Kick+1
EndIf 
KickCounter%2


; MOUVEMENT VERS LA DIRECTION
For Lenght = 1 To Kick
		If Direction = #LEFT : X-1 : EndIf 
		If Direction = #UP     :Y-1: EndIf 
		If Direction = #RIGHT : X+1: EndIf 
		If Direction = #DOWN : Y+1: EndIf 

Px = (640/2) + X
Py = (480/2) + Y
; CLIPPING
If Px=>0 And Px<640 And Py=>0 And Py<480
		Plot(Px,Py,$FF00FF)
EndIf 
		
Next 

;CHANGE DE DIRECTION
If Direction = #LEFT : Direction = #UP : Continue : EndIf 
If Direction = #UP     : Direction = #RIGHT : Continue : EndIf 
If Direction = #RIGHT : Direction = #DOWN : Continue : EndIf 
If Direction = #DOWN : Direction = #LEFT : Continue : EndIf 

Next 



EndProcedure
Old_Shark
Messages : 20
Inscription : sam. 13/déc./2008 1:40
Localisation : Belgique

Message par Old_Shark »

Je ne voulais pas te manquer de respect.

Ce poste-là était à prendre avec ironie (ma faute, désolée).

Le code est parfait, merci.

Et encor pardon.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Dobro a écrit :
Old_Shark a écrit : Un pixel est dessiné au centre de la fenêtre.
Ensuite, on trace des pixels autour.
Ainsi de suite, jusqu’au bord de la fenêtre.
mon listing contient toutes les procedures pour faire ça !! :? :wink:
Old_Shark a écrit :Non ! J’ai déjà expliqué le pourquoi.


hum !! mieux vaut lire ça que d'etre aveugle !! :?

alors je repete doucement !!

mon listing , contient toutes les procedures pour faire ce que ton graphique représente !!

les deux fonctions :

Code : Tout sélectionner

Procedure.f RotationX(x.f, angle.f, dist.f) 
    ProcedureReturn x + Cos(angle*#PI/180)*dist 
EndProcedure


Procedure.f RotationY(y.f, angle.f, dist.f) 
    ProcedureReturn y + Sin(angle*#PI/180)*dist 
EndProcedure
sont meme le moteur de mon puregolo !! (un interpreteur LOGO )

si ma tortue est capable de dessiner ton trucs, c'est justement grace a ces deux fonctions !!!


alors avant d'affirmer qu'un truc ne marche pas , renseigne toi un petit peu !! :roll:

meme que grace au moteur 3D de tmyke, elle peut meme te le faire en 3D !! :lol:


ps : ces 2 petites fonctions, peuvent en principe dessiner tout ce que tu veux en 2D !!
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

une autre solution c'est d'aller toujours tout droit selon la direction en cours, et de tourner dès que c'est possible.

Code : Tout sélectionner

Enumeration 
  #Haut
  #Gauche
  #Bas
  #Droite
EndEnumeration

Procedure dessine(x,y,sens)
  Couleur=RGB(255,0,0)
  
  StartDrawing(WindowOutput(0))
  
  While x<WindowWidth(0) And y<WindowHeight(0) And x>=0 And y>=0
    Plot(x, y, Couleur)
 
    Select sens
      Case #Haut
        y - 1
        If Point(x - 1, y) <> Couleur
          sens = #Gauche
        EndIf
      Case #Gauche
          x - 1
        If Point(x , y + 1) <> Couleur
          sens = #Bas
        EndIf
      Case #Bas
        y + 1
        If Point(x + 1, y) <> Couleur
          sens = #Droite
        EndIf  
      Case #Droite
         x + 1
        If Point(x , y - 1) <> Couleur
          sens = #Haut
        EndIf
    EndSelect  

  Wend
 
  StopDrawing()

EndProcedure

OpenWindow(0,0,0,600,600,"test")
dessine(300,300,#Haut)
Repeat

Until WaitWindowEvent()=#PB_Event_CloseWindow
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Pour le fun, ma soluce à moi!

Code : Tout sélectionner

;* Remplissage spirale
;*  Remplit une fenêtre en suivant une spirale
;*  Pour le fun ;)
;*
;* djes 2009
;*
;*****************************************************************************

Macro fill_line

  ;#PI/2 -> 90°
  angle + #PI/2
  vx = Cos(angle)
  vy = Sin(angle)

  For u = c To c + n

    ;Le 3ème param sert à mettre un peu de couleur
    Plot(x, y, (u - c ) * $010000 )

    x + vx
    y + vy

    ;Petit ralentisseur : 1 ms tous les 10 points
    If u%10 = 1
      Delay(1)
    EndIf

  Next u
  
  c = u

EndMacro

;*****************************************************************************

Procedure remplissage_spirale_1(window_nb.l)

  StartDrawing(WindowOutput(window_nb))

  x = WindowWidth(window_nb)  / 2
  y = WindowHeight(window_nb) / 2
  
  c = 0
  n = -1
  angle.f = 0
  sum = WindowWidth(window_nb) * WindowHeight(window_nb)
 
  Repeat

    n + 1

    fill_line
    fill_line

  Until c >= sum
  
  StopDrawing()

EndProcedure

;*****************************************************************************

Procedure remplissage_spirale_2(window_nb.l)

  StartDrawing(WindowOutput(window_nb))

  x = WindowWidth(window_nb)  / 2
  y = WindowHeight(window_nb) / 2
  
  c = 0
  n = -1
  angle.f = 0
  sum = WindowWidth(window_nb) * WindowHeight(window_nb)
 
  Repeat

    n+1

    fill_line

  Until c >= sum/2

  StopDrawing()

EndProcedure

;*****************************************************************************

OpenWindow(0,   0, 0, 256, 256, "test1")
OpenWindow(1, 256, 0, 256, 256, "test2")

remplissage_spirale_1(0)
remplissage_spirale_2(1)

Repeat
Until WaitWindowEvent()=#WM_CLOSE
Comtois> Sympa :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

bon pour te prouver que mes petite formules fonctionnent aussi ;)

je les aient integrés dans une procedure "Tortue"

l'avantage de ma procedure tortue, c'est qu'elle peut répondre a tout les besoins !! :)

syntaxe :
tortue(crayon,x.f,y.f,angle.f,dist.f,couleur,type,taille,mode)

crayon -> 0 ou 1 indique si la tortue dessine ou pas !!
x-> coordonée de depart X de la tortue
y-> coordonée de depart Y de la tortue
angle -> donne l'orientation en degres de la tortue (0= nord vers le haut de l'ecran)
Dist-> le nombre de pas (ou la longueur du saut) que va effectuer la tortue
couleur -> couleur du dessin
type-> type du dessin (forme du pinceau , plot,line,box,circle)
mode-> correspond au mode graphique de purebasic voir doc

dans le listing suivant l'exemple actif correspond a ce que tu voulais obtenir

les autres exemple a décommenter , sont a regarder , tu verra que rien qu'en touchant le parametre Mode , on peut faire des trucs amusants !!

le listing :





Code : Tout sélectionner

; Tortue (mini logo)
; Code Dobro
Enumeration
    #point 
    #box 
    #circle 
    #ligne
EndEnumeration


Declare.f tortue(crayon,x.f,y.f,angle.f,dist.f,couleur,type,taille,mode)


Global xa=200
Global ya=200

;
InitSprite()
OpenWindow(0,0,0,400,400,"mini_logo")
OpenWindowedScreen(WindowID(0),1,1,400,400,1,0,0)
ClearScreen(RGB(255,255,255))
;********************* test diferents pinceaux ***********************************
; StartDrawing(WindowOutput(0)) 
    ; angle=0
     ; tortue(0,20,20,angle, dist ,RGB(0,0,0),#ligne,taille,mode)
    ; For d=1 To 360
       ; angle=d
        ; dist=150
        ; mode=#PB_2DDrawing_Outlined   ; mode=#PB_2DDrawing_Default 
        ; taille=100
        ; bleu=Random(155)+50
        ; vert=Random(10)+50
        ; rouge=Random(155)+50
        ; 
          ; tortue(1,xa,ya,angle, dist ,RGB(0,0,0),#circle,taille,mode)
       ; ; tortue(1,xa,ya,angle, dist ,RGB(0,0,0),#box,taille,mode)
       ; ; tortue(1,xa,ya,angle, dist ,RGB(0,0,0),#point,taille,mode)
        ; 
       ; 
       ; 
; Next d
    ; 
; StopDrawing()
; ***************************************************************************

; ************************ un carré ***********************************
    ; angle=0
    ; xa=50:ya=50
    ; dist=0
    ; angle=90
 ; StartDrawing(ScreenOutput()) 
    ; tortue(0,xa,ya,angle, dist ,RGB(0,0,0),#ligne,taille,mode) ; transporte la tortue au depart (sans déssiner)
      ; StopDrawing()
  ; 
    ; For d=1 To 4 ; 4 cotés pour un carre
        ; dist=150
        ; mode=#PB_2DDrawing_Default 
        ; taille=1
       ; 
        ; bleu=Random(155)+50
        ; vert=Random(10)+50
        ; rouge=Random(155)+50
            ; StartDrawing(ScreenOutput()) 
        ; tortue(1,xa,ya,angle, dist ,RGB(rouge,vert,bleu),#ligne,taille,mode)
        ; StopDrawing()
       ; angle=angle+90
    ; FlipBuffers()
    ; 
    ; Next d 
  
; ************************************************************************

; ************************ un triangle ***********************************
    ; angle=0
    ; xa=50:ya=50
    ; dist=0
    ; angle=90
 ; StartDrawing(ScreenOutput()) 
    ; tortue(0,xa,ya,angle, dist ,RGB(0,0,0),#ligne,taille,mode) ; transporte la tortue au depart (sans déssiner)
      ; StopDrawing()
  ; 
    ; For d=1 To 3 ; 3 cotés pour un triangle
        ; dist=150
        ; mode=#PB_2DDrawing_Default 
        ; taille=1
       ; 
        ; bleu=Random(155)+50
        ; vert=Random(10)+50
        ; rouge=Random(155)+50
            ; StartDrawing(ScreenOutput()) 
        ; tortue(1,xa,ya,angle, dist ,RGB(rouge,vert,bleu),#ligne,taille,mode)
        ; StopDrawing()
        ; angle=angle+120 ; dessine un triangle !!
    ; FlipBuffers()
    ; 
; Next d 
  
; ************************************************************************
; ************************ une spirale carré ***********************************
angle=0
xa=200:ya=200
dist=0
angle=90
StartDrawing(ScreenOutput()) 
    tortue(0,xa,ya,angle, dist ,RGB(0,0,0),#ligne,taille,mode) ; transporte la tortue au depart (sans déssiner)
StopDrawing()
  
 
For d=1 To 201 ; la tortue va faire 200 pas !! 
    For i=  1 To d 
        mode=#PB_2DDrawing_Default 
        taille=4
        dist=taille/2 ; on augmente le trajet que parcour la tortue en changeant ceci on peut ajourer la spirale
        StartDrawing(ScreenOutput())
            tortue(1,xa,ya,angle, dist ,RGB(rouge,vert,bleu),#box,taille,mode)
        StopDrawing()
    Next i
    angle=angle+90 ; on fait des angle de 90 degres pour rester carré
    bleu=bleu+1; on eclairci la couleur a chaque tour
    vert=vert+1
    FlipBuffers()
Next d 

        

; ************************************************************************


Repeat
    FlipBuffers()
Until WaitWindowEvent()=#WM_CLOSE



Procedure.f tortue(crayon,x.f,y.f,angle.f,dist.f,couleur,type,taille,mode)
    Static xzz
    Static yzz
    Static flag
    
    If flag=1
        x=xzz
        y=yzz
    EndIf
    flag=1 
    angle=angle-90 ; ceci oriente la tortue tete vers le haut de l'ecran (au nord)
    DrawingMode(mode)
    x.f + Cos(angle*#PI/180)*dist 
    y.f + Sin(angle*#PI/180)*dist  
    If crayon=1
        Select type
            Case #point
                Plot(x,y,couleur)
            Case #box
                Box(x,y,taille,taille,couleur)
            Case #circle
                Circle(x,y,taille,couleur)
            Case #ligne 
                LineXY(xzz,yzz,x,y,couleur)   
        EndSelect 
        
    EndIf
    xzz=x
    yzz=y 
EndProcedure
ps : bravo les gars !! :)
Répondre