Ligne motif

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
threedslider
Messages : 455
Inscription : dim. 01/juil./2018 22:38

Ligne motif

Message 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
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Re: Ligne motif

Message par SPH »

Tu saurais nous montrer en jpg ce que tu souhaite ?
Car là, je ne vois pas ce que tu désires faire... 😎

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
threedslider
Messages : 455
Inscription : dim. 01/juil./2018 22:38

Re: Ligne motif

Message par threedslider »

Comme ça :

Image
Avatar de l’utilisateur
threedslider
Messages : 455
Inscription : dim. 01/juil./2018 22:38

Re: Ligne motif

Message 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
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Re: Ligne motif

Message par SPH »

Tout bete en effet... :D

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Ligne motif

Message 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
Avatar de l’utilisateur
threedslider
Messages : 455
Inscription : dim. 01/juil./2018 22:38

Re: Ligne motif

Message 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)
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Ligne motif

Message 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...
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Re: Ligne motif

Message par SPH »

🤭

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
threedslider
Messages : 455
Inscription : dim. 01/juil./2018 22:38

Re: Ligne motif

Message 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à :!:
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Ligne motif

Message 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.
Répondre