Une ligne droite et des points à placer

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Une ligne droite et des points à placer

Message par falsam »

Objectif:
- Dessiner une ligne droite constituée de deux vecteurs V1(x,y) et V2(x,y)
- Placer un nombre de points sur cette ligne droite en fonction de l'intervalle entres les points.

Voila ce que ça donne avec ce code

Code : Tout sélectionner

Enumeration Window
  #MainForm
EndEnumeration

Enumeration Gadgets
  #Canvas
EndEnumeration

Declare.d Distance(*p.Point, *q.Point)

If OpenWindow(#MainForm, 0, 0, 1024, 768, "Une ligne droite & des points", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  CanvasGadget(#Canvas, 0, 0, 1024, 768)
  
  ;Définition de deux vecteurs
  V1.Point
  V1\x = 100
  V1\y = 100
  
  V2.Point
  V2\x = 700
  V2\y = 500
    
  ;Calcul de la distance entres les deux vecteurs
  Distance = Distance(V1, V2)
    
  ;Définition de l'interval entres les points à placer
  Interval.f = 150
    
  ;Calcul du nombre de points à placer 
  CountPoint = Distance / Interval

  ;Dessin de la droite
  StartDrawing(CanvasOutput(#Canvas))
  
  LineXY(V1\x, V1\y, V2\x, V2\y, RGB(105, 105, 105))
    
  ;Vecteur V1 représenté par un plot
  Circle(V1\x, V1\y, 5, RGB(255, 69, 0))
  
  ;Mémorisation du premier point
  NextPointX.f = V1\x
  NextPointY.f = V1\y
  
  DeltaX.f = V2\x - V1\x
  DeltaY.f = V2\y - V1\y
  
  ;On place les points à egales distances 
  For N = 1 To CountPoint
    NextPointX = NextPointX + DeltaX/CountPoint
    NextPointY = NextPointY + DeltaY/CountPoint

    Circle(NextPointX, NextPointY, 5, RGB(218, 165, 32))
  Next
    
  StopDrawing()
      
  Repeat : Until WaitWindowEvent(10) = #PB_Event_CloseWindow
EndIf


;Distance entres deux vecteurs
 Procedure.d Distance(*p.Point, *q.Point)
  Protected Distance.d
  
  ;Distance horizontale
  dx.d = *p\x - *q\x   
  
  ;Distance verticale
  dy.d = *p\y - *q\y
  
  ;Théoréme de Pythagore
  Distance.d = Sqr(dx*dx + dy*dy )
  
  ProcedureReturn Distance
EndProcedure
@Blendman: Couplé au code de ta demande sur un autre post à mon avis ça doit fonctionner. je vais me remettre à ce fameux code.....
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: Une ligne droite et des points à placer

Message par microdevweb »

Hum intéressant, cela va me servir pour la liaison de mon système de node.

Merci falsam
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Répondre