Page 1 sur 1
Rotation ligne
Publié : jeu. 28/août/2014 13:02
par microdevweb
Bonjour,
Je ne suis vraiment part fort en trigono,
Quel est la formule tracer une ligne avec un angle donné en mode point par par point
Code : Tout sélectionner
;Exemple avec un angle de 30 degrés (ou autre peut importe)
For Y=1 To 100
Plot(X,Y,Couleur)
X+?
Next
Re: Rotation ligne
Publié : jeu. 28/août/2014 13:13
par Cool Dji
Hello,
Rhooooo; multiplie la valeur de Y par un sinuns(30) ou un cosinus(30) en pensant avant à convertir ton angle en radian...
J'ai pas testé le code mais normalement :
For y=0 to 100
Plot(Y*Cos(rad(30),Y) ou Plot(Y*Sin(rad(30),Y)
Next
Sinon, tu peux tracer une ligne Line(0,0,100*Cos(rad(30),100) un truc du genre...
Re: Rotation ligne
Publié : jeu. 28/août/2014 13:26
par microdevweb
Merci Cool Dji,
Je penses que c'est bon
Re: Rotation ligne
Publié : jeu. 28/août/2014 13:27
par falsam
Rhooooo + 1 (héhé)
Un exemple dans la doc :
http://www.purebasic.com/french/documen ... inexy.html
En reprenant le code de l'exemple.
Code : Tout sélectionner
Procedure DrawLine(x, y, angle, Lenght, Color)
LineXY(x, y, x+Cos(Radian(Angle))*Lenght, y+Sin(Radian(Angle))*Lenght, Color)
EndProcedure
OpenWindow(0, 0, 0, 800, 600, "DrawLine", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CreateImage(0, 800, 600)
StartDrawing(ImageOutput(0))
Box(0, 0, 800, 600, RGB(255, 255, 255))
DrawLine(10, 300, -45, 200, RGB(255, 0, 0))
DrawLine(10, 300, 45, 200, RGB(255, 0, 0))
StopDrawing()
ImageGadget(0, 0, 0, 200, 200, ImageID(0))
Repeat : Until WaitWindowEvent(100) = #PB_Event_CloseWindow
Re: Rotation ligne
Publié : jeu. 28/août/2014 13:31
par microdevweb
Merci Falsam,
J'avais regarder l'aide de lineXy, mais idiot que suis pas l'exemple...
Re: Rotation ligne
Publié : jeu. 28/août/2014 13:37
par microdevweb
Il y a t'il un moyen d'éviter alliasing (escaliers)?
Re: Rotation ligne
Publié : jeu. 28/août/2014 13:42
par falsam
microdevweb a écrit :Il y a t'il un moyen d'éviter alliasing (escaliers)?
Vu ton projet, cette solution devrait te convenir.
http://www.purebasic.fr/english/viewtop ... rawing.pbi
Re: Rotation ligne
Publié : jeu. 28/août/2014 13:52
par microdevweb
Merci Falsam,
Cette dll à l'air puissante
Re: Rotation ligne
Publié : jeu. 28/août/2014 14:01
par falsam
Pour fonctionner tu as besoin d'avoir dans le dossier de ton application les fichiers suivants:
- L'include
gDrawing.pbi
- les libs
gdiplus_x64.lib et
gdiplus_x86.lib
le code précédant devient:
Code : Tout sélectionner
XIncludeFile "gDrawing.pbi"
Procedure DrawLine(x, y, angle, Lenght, Color)
gLineXY(x, y, x+Cos(Radian(Angle))*Lenght, y+Sin(Radian(Angle))*Lenght, Color)
EndProcedure
gInit()
OpenWindow(0, 0, 0, 800, 600, "DrawLine", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CreateImage(0, 800, 600)
gStartDrawing(ImageOutput(0))
gDrawingMode(#PB_2DDrawing_Outlined)
Box(0, 0, 800, 600, RGB(255, 255, 255))
DrawLine(10, 300, -45, 200, RGBA(255, 0, 0, 255))
DrawLine(10, 300, 45, 200, RGBA(255, 0, 0, 255))
gStopDrawing()
ImageGadget(0, 0, 0, 200, 200, ImageID(0))
gEnd()
Repeat : Until WaitWindowEvent(100) = #PB_Event_CloseWindow
Tes lignes seront parfaites

Re: Rotation ligne
Publié : jeu. 28/août/2014 14:11
par falsam
Tu peux jouer sur l'épaisseur de la ligne avec le commande
gSetPen(Color, Size)
Le code devient
Code : Tout sélectionner
XIncludeFile "gDrawing.pbi"
Procedure DrawLine(x, y, angle, Lenght, Thickness=2, Color=$FF000000)
gSetPen(Color,Thickness)
gLineXY(x, y, x+Cos(Radian(Angle))*Lenght, y+Sin(Radian(Angle))*Lenght)
EndProcedure
gInit()
OpenWindow(0, 0, 0, 800, 600, "DrawLine", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CreateImage(0, 800, 600)
gStartDrawing(ImageOutput(0))
gDrawingMode(#PB_2DDrawing_Outlined)
Box(0, 0, 800, 600, RGB(255, 255, 255))
DrawLine(10, 300, -45, 200, 5, RGBA(255, 0, 0, 255))
DrawLine(10, 300, 45, 200, 5, RGBA(255, 0, 0, 255))
gStopDrawing()
ImageGadget(0, 0, 0, 200, 200, ImageID(0))
gEnd()
Repeat : Until WaitWindowEvent(100) = #PB_Event_CloseWindow
Re: Rotation ligne
Publié : jeu. 28/août/2014 14:58
par Ollivier
@Falsam
Bonjour, je me suis souvenu de ce post:
http://www.purebasic.fr/french/viewtopic.php?f=3&t=8551
LSI avait une méthode particulièrement simple d'aborder la technique, optimisable et surtout légère: c'est du code, pas des libs. Je n'ai pas la possibilité de remettre à jour actuellement.
C'est plus un hommage à cette personne, n'ayant plus de nouvelles depuis longtemps maintenant.
Re: Rotation ligne
Publié : jeu. 28/août/2014 15:19
par G-Rom
@microdevweb
Pour faire tourner un point selon un angle , c'est simple :
Code : Tout sélectionner
Rotation_x = centre + distance * cos( degrés * # PI / 180 )
Rotation_y = centre + distance * sin( degrés * # PI / 180 )
Si tu fait 360x cela , tu obtiens un cercle de rayon "distance" à la position "centre"

Re: Rotation ligne
Publié : jeu. 28/août/2014 15:32
par microdevweb
Merci à tous pour vos réponse
