JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Dessin de flèche Dim 15 Jan 2023 - 9:11 | |
| Rien de révolutionnaire !!! ça a même sans doute déjà été fait... - Code:
-
PICTURE 1: FULL_SPACE 1: 2D_TARGET_IS 1 2D_PEN_WIDTH 3 Fleche(20,100,300,20) END ' ========================================================= SUB Fleche(x1,y1,x2,y2) ' Dessin d'une flèche entre x1,y1 et x2,y2 sur la cible 2D ' (couleur et épaisseur du trait courqnts) DIM_LOCAL an,a1,a2,d,a,x,y,xa,ya 2D_LINE x1,y1,x2,y2 DEGREES IF x2 = x1 THEN x2 = x1+1 IF y2 = y1 THEN y2 = y1+1 an = ATN((y2-y1)/(x2-x1)) ' À ajuster: longueur des branches (pixels) et écartement (degrés) : d = 20: a = 30: ' pixels et degrés a1 = an-a: a2 = an+a IF x2>x1 AND y2<y1 THEN a1 = a1+180: a2 = a2+180 IF x2>x1 AND y2>y1 THEN a1 = a1+180: a2 = a2-180 xa = d*COS(a1)+x2: ya = d*SIN(a1)+y2: 2D_LINE xa,ya,x2,y2 x = d*COS(a2)+x2: y = d*SIN(a2)+y2: 2D_POLY_TO x,y ' 2D_POLY_TO xa,ya: triangle de pointe fermé ... END_SUB ' ========================================================= | |
|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Dessin de flèche Dim 15 Jan 2023 - 16:24 | |
| Bonjour JL35 Ah ah, on jongle avec la trigonométrie! Bon, voici mon code sans trigo - Code:
-
rem ============================================================================ rem Dessiner une flèche ou un vecteur avec la bonne orientation rem ============================================================================ dim i picture 10 : full_space 10 : 2d_target_is 10 ' Exemples: 2d_pen_color 255,0,0 : 2d_pen_width 1 : Vecteur(30,180,120,150,10,8) 2d_pen_color 0,0,255 : 2d_pen_width 2 : vecteur(200,100,30,25,10,8) 2d_pen_color 0,128,0 : 2d_pen_width 3 for i = 1 to 15 vecteur(240,30+10*i,260,20+10*i,6,4) next i 2d_pen_color 0,0,0 : 2d_pen_width 4 : Vecteur(20,400,500,20,15,10) Vecteur(500,50,500,400,20,10)
end rem ============================================================================ ' Retourne la longueur du segment entre le point de début et le point de la fin ' du vecteur FNC Norm(xa,ya,xb,yb) result sqr((xb-xa)*(xb-xa) + (yb-ya)*(yb-ya)) END_FNC rem ============================================================================ ' Tracer le vecteur entre A(xa) et B(xc,yb) ' Paramètres ' xa,ya : coordonnées du point de départ ' xb,yb : coordonnées du point d'arrivé ' l et w : 2 paramètres qui désignent la taille de la flèche (longeur et largeur) SUB Vecteur(xa,ya,xb,yb,l,w) dim_local ab,xc,yc,xd,yd,xe,ye ab = Norm(xa,ya,xb,yb) xc = xb + l * (xa-xb)/ab yc = yb + l * (ya-yb)/ab xd = xc + w * (0-(yb-ya))/ab : yd = yc + w * (xb-xa)/ab xe = xc - w * (0-(yb-ya))/ab : ye = yc - w * (xb-xa)/ab 2d_line xa,ya,xb,yb : 2d_line xd,yd,xb,yb : 2d_poly_to xe,ye END_SUB rem ============================================================================
Une autre façon avec un modèle plus fin - Code:
-
rem ============================================================================ rem Dessiner une flèche ou un vecteur rem Modèle de flèche plus fin rem ============================================================================ dim i picture 10 : full_space 10 : 2d_target_is 10 ' Exemples: Vecteur(30,180,120,150,10,8,8,255,0,0,1) Vecteur(200,100,30,25,10,18,30,0,0,255,2) Vecteur(20,400,500,50,10,20,30,0,0,0,4) for i = 1 to 15 Vecteur(240,30+10*i,260,20+10*i,6,4,5,0,128,0,1) next i Vecteur(500,400,500,150,20,15,18,255,0,0,1) end rem ============================================================================ ' Retourne la longueur du segment entre le point de début et le point de la fin ' du vecteur FNC Norm(xa,ya,xb,yb) result sqr((xb-xa)*(xb-xa) + (yb-ya)*(yb-ya)) END_FNC rem ============================================================================ ' Paramètres ' Tracer le vecteur entre A(xa) et B(xc,yb) ' Paramètres ' xa,ya : coordonnées du point de départ ' xb,yb : coordonnées du point d'arrivé ' l et w : 2 paramètres qui désignent la taille de la flèche (longeur et largeur) ' i : profondeur de la flèche ' r,v,b : composantes de la couleur du tracé 'pw : largeur du tracé (pen_width) SUB Vecteur(xa,ya,xb,yb,l,w,i,r,v,b,pw) dim_local ab,xbp,ybp,xc,yc,xd,yd,xe,ye AB = Norm(xA,yA,xB,yB) xBp = xB+i*(xB-xA)/AB : yBp = yB+i*(yB-yA)/AB xC = xB+l*(xA-xB)/AB : yC = yB+l*(yA-yB)/AB xD = xC+w*(0-(yB-yA))/AB : yD = yC+w*((xB-xA))/AB xE = xC-w*(0-(yB-yA))/AB : yE = yC-w*((xB-xA))/AB 2d_pen_color r,v,b : 2d_pen_width pw : 2d_line xa,ya,xb,yb 2d_poly_from xd,yd : 2d_poly_to xb,yb 2d_poly_to xe,ye : 2d_poly_to xbp,ybp: 2d_poly_to xd,yd 2d_flood (xb+xbp)/2,(yb+ybp)/2,r,v,b END_SUB rem ============================================================================
| |
|