Polygons

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

@Dobro
Tes polygones sont réguliers, tu devrais essayer de calculer les coordonées des points et de les filer à la fonction Polygon_() pour voir ^^.

Dri
kelly
Messages : 176
Inscription : jeu. 09/sept./2004 16:15

Message par kelly »

@Dobro : ca ne m'indifere pas, c'est que j'attend du terme polygon de vrais polygons, notament 2 choses : un remplissage a la paint, et une irregularité
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

un remplissage a la paint, et une irregularité
ben pour le remplissage j'ai au moins repondu ! :D
(ou alors t'a meme pas essayé mon dernier code posté)

pour l'irregularité , oui effectivement ....(sont jamais content en plus !) :?
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

@Dobro
Voila ce que je suggérai

Code : Tout sélectionner

#PI=3.1415926

Procedure PolygoneRegulier(x.l, y.l, width.l, sides.l, angle.f, color.l)
  Protected hDC.l, t.l, alpha.f, d.f, c.f
  
  !extrn _PB_2DDrawing_CurrentDC
  !MOV eax, dword [_PB_2DDrawing_CurrentDC]
  !MOV [esp+24], eax
   
  
  If hDC And sides > 2
    angle * 0.01745329
    Dim Points.Point(sides)
    
    FrontColor(Red(color), Green(color), Blue(color))
    
    alpha = (2*#PI) / sides
    d = angle
    
    t = 0
    While t < sides
      
      c = Cos(d) * width
      s = Sin(d) * width
      
      Points(t)\x = x + s
      Points(t)\y = y + c
      
      t + 1
      d + alpha
    Wend
    
    Polygon_(hDC, Points(), sides)
  EndIf
EndProcedure

InitSprite()
InitKeyboard()

ExamineDesktops()
OpenWindow(1, 0, 0, DesktopWidth(0), DesktopHeight(0), #PB_Window_BorderLess, "")
OpenWindowedScreen(WindowID(), 0, 0, DesktopWidth(0), DesktopHeight(0), 1, 0, 0)

largeur.l  = 100
rotation.f = 180
nb_cotes.l = 4 
dl = 1

Repeat
  
  rotation + 1
  If rotation > 360
    rotation - 360
  EndIf
  
  largeur + dl
  If largeur = 50
    dl =  1
  EndIf
  If largeur = 200
    dl = -1
  EndIf
  
  If StartDrawing( ScreenOutput() )
    DrawText(Str(rotation))
    PolygoneRegulier(400, 300, largeur, nb_cotes, rotation, $80FFFF)
    StopDrawing()
  EndIf
  
  FlipBuffers()
  ClearScreen(0, 0, 0)
  ExamineKeyboard()
  
Until KeyboardPushed(#PB_Key_Escape)
Dri ;)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

tu avais ecrit
Tes polygones sont réguliers,
cette exemple aussi !!

pour obtenir un effet de changement de taille, il suffisait de changer le parametre taille de mon code , le fait de passer par une API , n'est pas forcement un plus !


par contre je ne pense pas possible de pouvoir faire des polygones a multiple cotes parametrable et irregulier avec une procedure !!!

car on ne peut pas savoir a l'avance le nombre de cote choisi par le programmeur, et donc entrer une valeur differente de longeurs des segments de droite composant le polygone !!

au niveau vitesse ça doit etre pareil !!

vous avez bien reessayé mon dernier code au moins !?
vous vous etes apercu qu'il y a une procedure suplementaire pour le remplissage !!


procedure tres tres utile car contrairement au Fillarea , elle n'a pas besoin de couleur de bord pour s'arreter !
elle s'arrete des que la couleur change !!
je trouve qu'elle devrai rempacer le Fill AREA qui est mal foutu pour ça ! ..

:D

@ Dri : je ne doutais pas en tout cas de tes capacites a pondre un code
conci !! :D

@ Kelly une fonction qui prend en compte tous les cas de figure en matiere de polygone , c'est plus une fonction , c'est un Programme !
tu m'a juste donné l'envie de ne plus repondre a tes questions !
a part ça ..... ça va ! :D
kelly
Messages : 176
Inscription : jeu. 09/sept./2004 16:15

Message par kelly »

Exact =)
Mais bon, j'ai trouvé mon bonheur avec les polygons qui viennent apparement de l'API directX (d'apres ce que j'ai compris)
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

@dobro
c'était juste pour réécrire ta fonction en utilisant Polygon_
le coup du zoom c'était juste pour faire mumuse ^^

Dri ;)
Répondre