Rotation ligne

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Rotation ligne

Message 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
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

Re: Rotation ligne

Message 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...
Only PureBasic makes it possible
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Rotation ligne

Message par microdevweb »

Merci Cool Dji,

Je penses que c'est bon
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Rotation ligne

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Rotation ligne

Message par microdevweb »

Merci Falsam,

J'avais regarder l'aide de lineXy, mais idiot que suis pas l'exemple...
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Rotation ligne

Message par microdevweb »

Il y a t'il un moyen d'éviter alliasing (escaliers)?
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Rotation ligne

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Rotation ligne

Message par microdevweb »

Merci Falsam,
Cette dll à l'air puissante
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Rotation ligne

Message 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 :)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Rotation ligne

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Rotation ligne

Message 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.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Rotation ligne

Message 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" ;)
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Rotation ligne

Message par microdevweb »

Merci à tous pour vos réponse :lol:
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Répondre