PB5.50b1 : trouver un point dans une courbe (vector drawing)

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

PB5.50b1 : trouver un point dans une courbe (vector drawing)

Message par blendman »

salut

Avec la nouvelle version de purebasic, il y a quelques nouvelles fonctions poour la lib vector drawing qui ont l'air pratique.
Je me demandais si c'était possible de trouver la position X/Y d'un point dans une courbe.
J'ai essayé ça, mais ça ne marche pas (logique, car ce n'est pas comme ça que ça fonctionne, mais je n'ai pas d'idée pour avoir le bon résultat ^^).

Si vous avez une idée, je suis preneur :D.

Code : Tout sélectionner


Procedure getpoint()
    
    If StartVectorDrawing(CanvasVectorOutput(0))
        
        x1 = GetGadgetAttribute(0, #PB_Canvas_MouseX)
        y1 = GetGadgetAttribute(0, #PB_Canvas_MouseY)
        
        
        AddPathBox(0, 0, 400,200)
        VectorSourceColor(RGBA(255, 255, 255, 255))
        FillPath()
       
        ; construct path
        MovePathCursor(150, 125)
        AddPathCurve(0, 270, 0, -150, 350, 180)
        
        ; get location & angle of point on the path
        x = PathPointX(150+x1)
        y = PathPointY(125+y1)
        a = PathPointAngle(200)
        
        ; stroke the path
        VectorSourceColor($FF0000FF)
        StrokePath(5)
        
        ; draw a marker at the path point
        AddPathCircle(x, y, 10)
        VectorSourceColor($FFFF0000)
        FillPath()
        
        MovePathCursor(x, y)
        AddPathLine(30*Cos(Radian(a)), 30*Sin(Radian(a)), #PB_Path_Relative)
        StrokePath(5)
        
        StopVectorDrawing()
    EndIf
    
EndProcedure

If OpenWindow(0, 0, 0, 400, 200, "VectorDrawing", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    
    
    CanvasGadget(0, 0, 0, 400, 200)
      
    Repeat
        Event = WaitWindowEvent()
        
        If event=#PB_Event_Gadget
            
            If EventGadget() = 0
                
                getpoint()
                
            EndIf
            
        EndIf
        
        
    Until Event = #PB_Event_CloseWindow
EndIf
Merci ;)