Page 1 sur 1

Ligne motif

Publié : jeu. 18/août/2022 20:30
par threedslider
Hello,

Je voulais faire les lignes motifs à effet escalier :)... mais on le voit mais aussi c'est pas bien construit, avez vous une idée de cela ? Comment fixer cette imperfection ??

Merci

Voici le code :

Code : Tout sélectionner

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Created by threedslider 18/08/2022
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Pattern Line test
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


InitSprite()
InitKeyboard()

Procedure LinePath(X.i, Y.i, X2.i, Y2.i, D.i)
  
  LineXY( X, Y, X2, Y2, RGB(255, 0, 0) )
  
  If X > 0 And X < 500
    LinePath(X+50, Y+50, X2+50, Y2+50, D-1)
    If  D ;Y> 0 And Y < 500
       LinePath(X+50, Y, X2, Y2+50, D-1)
    EndIf
  EndIf
 
  
EndProcedure


OpenWindow(1, 0,0,800,600,"Pattern Line test", #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(1),0,0,800,600,0,0,0)

Repeat
  ExamineKeyboard()
  event = WindowEvent()
  ClearScreen(RGB(255,200,0))
  
  StartDrawing(ScreenOutput())
  
  For i= 0 To 2
       LinePath(100, 50, 150, 50, i)
  Next
  
     
  StopDrawing()
  
  
 FlipBuffers()
  
Until event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)
End

Re: Ligne motif

Publié : jeu. 18/août/2022 20:46
par SPH
Tu saurais nous montrer en jpg ce que tu souhaite ?
Car là, je ne vois pas ce que tu désires faire... 😎

Re: Ligne motif

Publié : jeu. 18/août/2022 20:58
par threedslider
Comme ça :

Image

Re: Ligne motif

Publié : jeu. 18/août/2022 21:36
par threedslider
... C'est tout bête j'ai fixé mais je comprends pas trop non plus ce que je fais :oops:

Mais ça marche !!

Voilà le code :

Code : Tout sélectionner

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Created by threedslider 18/08/2022
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Pattern Line test
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


InitSprite()
InitKeyboard()

Procedure LinePath(X.i, Y.i, X2.i, Y2.i, D.i)
  
  LineXY( X, Y, X2, Y2, RGB(255, 0, 0) )
  
  If X > 0 And X < 500
    LinePath(X+50, Y+50, X2+50, Y2+50, 0)
    If  D ;Y> 0 And Y < 500
       LinePath(X+50, Y, X2, Y2+50, 0)
    EndIf
  EndIf
 
  
EndProcedure


OpenWindow(1, 0,0,800,600,"Pattern Line test", #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(1),0,0,800,600,0,0,0)

Repeat
  ExamineKeyboard()
  event = WindowEvent()
  ClearScreen(RGB(255,200,0))
  
  StartDrawing(ScreenOutput())
  
  For i= 0 To 2
       LinePath(100, 50, 150, 50, i)
  Next
  
     
  StopDrawing()
  
  
 FlipBuffers()
  
Until event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)
End

Re: Ligne motif

Publié : jeu. 18/août/2022 21:56
par SPH
Tout bete en effet... :D

Re: Ligne motif

Publié : ven. 19/août/2022 0:13
par Ollivier
Allez... De tête sur smartphone...

Code : Tout sélectionner

Procedure marche(x.d, y.d, r.d, dir, color)
    if dir > 0
        c.d = 1.57 * dir
        w = cos(c)*r
        h = -sin(c)*r
        line(x, y, w, h, color)
        marche(x+w, y+h, r, (dir ! 1) - 4, color)
    endif
endProcedure
Exemple

Code : Tout sélectionner

marche(100, 100, 20, 16, #white)
Le polaire (cos & sin) permet beaucoup plus de possibilités (rotations, épaisseur de trait, etc...). Remplace 16 par 17 pour tester

Re: Ligne motif

Publié : ven. 19/août/2022 9:49
par threedslider
SPH a écrit : jeu. 18/août/2022 21:56 Tout bete en effet... :D
Merci :D



@Ollivier : Ton prototype marche pas du tout en premier mais heureusement je l'ai modifié un peu et mise à jour et plus fonctionnel :mrgreen:

Voilà à tester :

Code : Tout sélectionner

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Created by threedslider 18/08/2022
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Pattern Line test
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; Ajout et modification de la procedure "marche()" par Ollivier -- 19/08/2022


InitSprite()
InitKeyboard()

Procedure LinePath(X.i, Y.i, X2.i, Y2.i, D.i)
  
  LineXY( X, Y, X2, Y2, RGB(255, 0, 0) )
  
  If X > 0 And X < 500
    LinePath(X+50, Y+50, X2+50, Y2+50, 0)
    If  D ;Y> 0 And Y < 500
       LinePath(X+50, Y, X2, Y2+50, 0)
    EndIf
  EndIf
 
  
EndProcedure

Procedure marche(x.d, y.d, r.d, dir, color)
    If dir > 0
        c.d = 1.57 * dir
        w = Cos(c)*r
        h = -Sin(c)*r
        Line(x, y, w, h, color)
        marche(x+w, y+h, -r, (dir!1) - 4, color)
    EndIf
EndProcedure



OpenWindow(1, 0,0,800,600,"Pattern Line test", #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(1),0,0,800,600,0,0,0)

Repeat
  ExamineKeyboard()
  event = WindowEvent()
  ClearScreen(RGB(255,200,0))
  
  StartDrawing(ScreenOutput())
  
  ;For i= 0 To 2
   ;    LinePath(100, 50, 150, 50, i)
  ;Next
  
  For i = 0 To 4
    marche(100*i/2+100, 100*i/2+100, 50, 16, RGB(255, 0, 0) )
  Next
  
    
  StopDrawing()
  
  
 FlipBuffers()
  
Until event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)
End
Donc merci à toi aussi même si je comprends pas trop non plus mais il marche aussi 8)

Re: Ligne motif

Publié : ven. 19/août/2022 12:17
par Ollivier
threedslider a écrit :@Ollivier : Ton prototype marche pas du tout en premier mais heureusement je l'ai modifié
Je remercie ta tolérance !

Il semblerait que je me sois cogné la tête à la 5ème marche juste au-dessus de la flèche sur ton plan posté plus haut !

J'utilise la notion de "quart de tour" (90 degré = pi/2 radians =~= 1.57 radians) et

Code : Tout sélectionner

x ! 1
est la fonction binaire xor sur les entiers : ça alterne 0 puis 1 en cycle à l'infini, comme l'angle des marches d'un escalier : horizontal, vertical, et ainsi de suite.

Excellente programmation, et fais attention à sph : il est quand même sacrément taquin. On se connait depuis 15 ans maintenant et, si, si, c'est un taquin... Il faut le canaliser, donc prépare un petit algo rudimentaire sur les nombres premiers en réserve, c'est comme un bouclier de défense, j'ignore pourquoi, ça le freine dans ses taquineries...

Re: Ligne motif

Publié : ven. 19/août/2022 14:13
par SPH
🤭

Re: Ligne motif

Publié : ven. 19/août/2022 15:18
par threedslider
Ollivier a écrit : ven. 19/août/2022 12:17 J'utilise la notion de "quart de tour" (90 degré = pi/2 radians =~= 1.57 radians) et

Code : Tout sélectionner

x ! 1
est la fonction binaire xor sur les entiers : ça alterne 0 puis 1 en cycle à l'infini, comme l'angle des marches d'un escalier : horizontal, vertical, et ainsi de suite.
Ah oui je comprends mieux, donc moi j'ai modifié le motif pour le fun :mrgreen: , j'ai mis 5.759 radians pour 330 degré (330 x Pi/180 = environ 5.759)

Voilà le code en tout :

Code : Tout sélectionner

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Created by threedslider 18/08/2022
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Pattern Line test
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; Ajout et modification de la procedure "marche()" par Ollivier -- 19/08/2022


InitSprite()
InitKeyboard()

Procedure LinePath(X.i, Y.i, X2.i, Y2.i, D.i)
  
  LineXY( X, Y, X2, Y2, RGB(255, 0, 0) )
  
  If X > 0 And X < 500
    LinePath(X+50, Y+50, X2+50, Y2+50, 0)
    If  D ;Y> 0 And Y < 500
       LinePath(X+50, Y, X2, Y2+50, 0)
    EndIf
  EndIf
 
  
EndProcedure

Procedure marche(x.d, y.d, r.d, dir, color)
    If dir > 0
        c.d = 5.759 * dir
        w = Cos(c)*r
        h = -Sin(c)*r
        Line(x, y, w, h, color)
        marche(x+w, y+h, -r, (dir) - 4, color)
    EndIf
EndProcedure



OpenWindow(1, 0,0,800,600,"Pattern Line test", #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(1),0,0,800,600,0,0,0)

Repeat
  ExamineKeyboard()
  event = WindowEvent()
  ClearScreen(RGB(255,200,0))
  
  StartDrawing(ScreenOutput())
  
  ;For i= 0 To 2
   ;    LinePath(100, 50, 150, 50, i)
  ;Next
  
  For i = 0 To 7
    marche(100*i/1.25+100, 100*i/2+100, 50, 32+2, RGB(255, 0, 0) )
  Next
  
    
  StopDrawing()
  
  
 FlipBuffers()
  
Until event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)
End
Sa rend le motif cool ^^

Sinon moi vous me dites que je suis taquin ? xD... Non plutôt noob, car je sais pas tout je me perfectionne voilà :!:

Re: Ligne motif

Publié : ven. 19/août/2022 22:06
par Ollivier
threedslider a écrit :Sinon moi vous me dites que je suis taquin ? xD... Non plutôt noob, car je sais pas tout je me perfectionne voilà
On a pris la coutume de tutoyer. C'est plus facile, vu qu'on est plusieurs.