papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: SUBs de tracé de figures géométriques Dim 25 Aoû 2013 - 17:24 | |
| Salut tout le monde. Je vous propose quelques procédures de tracé de figures géométriques. Tout est commenté dans le code - Code:
-
' ****************************************************************************** ' Procédures de tracé de quelques figures géométriques Par Papydall ' Figures_Geometriques.bas ' ****************************************************************************** Ellipse(250,220,200,100) ' Ellipse(250,220,100,200)
' Spirale(300,200,10)
' Polygone(250,220,200,3) : ' triangle ou trigone ' Polygone(250,220,200,4) : ' carré ou tétragone ' Polygone(250,220,200,5) : ' pentagone ' Polygone(250,220,200,6) : ' hexagone ' Polygone(250,220,200,7) : ' heptagone ' Polygone(250,220,200,8) : ' octogone ' Polygone(250,220,200,9) : ' nonagone ou ennéagone ' Polygone(250,220,200,10) : ' décagone ' Polygone(250,220,200,11) : ' hendécagone ' Polygone(250,220,200,12) : ' dodécagone ' Polygone(250,220,200,20) : ' icosagone ' Polygone(250,220,200,100) : ' hécatontagone (on s'approche du cercle) ' Polygone(250,220,200,1000) : ' chiliagone (pratiquement un cercle) ' Polygone(250,220,200,10000) : ' myriagone (pratiquement un cercle)
' Pentagramme(250,220,200)
' Coeur(200,250,10)
' concoide(300,200,100)
' Papillon(300,300,50)
' Napperon(300,220,200)
' Secteur_Circulaire(300,220,0,90,200) ' Secteur_Circulaire(300,220,60,120,180) ' Secteur_Circulaire(300,220,-30,-60,200) ' Secteur_Circulaire(300,220,-60,-30,200)
end ' ****************************************************************************** ' Tracé d'une ellipse ' Appel : Ellipse(xc,yc,rx,ry) ' Paramètres: ' xc,yc : coordonnées du centre de l'ellipse ' rx et ry : respectivement rayon horizontal et rayon vertical de l'ellipse ' si rx = ry on obtient un cercle ' Exemple d'appel : ' Ellipse(250,220,100,200) ' Ellipse(250,220,200,100)
SUB Ellipse(xc,yc,rx,ry) dim_local x,y,t,pi,p pi = acos(-1) : p = pi/180 2d_poly_from xc + rx,yc for t = 0 to 2*pi step p x = xc + rx * cos(t) : y = yc + ry * sin(t) : 2d_poly_to x,y next t END_SUB ' ****************************************************************************** ' Tracé d'une spirale ' Appel Spirale(xc,yc,n) ' Paramètres: ' xc,yc : coordonnées du centre de la spirale ' n : nombre de tours ' Exemple d'appel : Spirale(300,200,10)
SUB Spirale(xc,yc,n) dim_local x,y,theta,pi,p pi = acos(-1) : p = pi/180 : 2d_poly_from xc,yc for theta = 0 to 2*n*pi step p x = xc + 3 * theta * cos(theta) : y = yc + 3* theta*sin(theta) 2d_poly_to x,y next theta END_SUB ' ****************************************************************************** ' Tracé d'un polygone convexe régulier ' Paramètres : ' xc,yc : coordonnées du centre du polygone ' rayon : rayon du cercle circonscrit au polygone ' Nbcote : nombre des côtés du polygone ' Exemple d'appel : ' Polygone(250,220,200,3) : ' triangle ' Polygone(250,220,200,4) : ' carré ' Polygone(250,220,200,5) : ' pentagone ' Polygone(250,220,200,10) : ' décagone ' Remarque : ' Pour un grand nombre des côtés on obtient un cercle ' Polygone(250,220,200,360) : ' un cercle
SUB Polygone(xc,yc,rayon,NbCote) dim_local x,y,t,pi,p pi = acos(-1) : p = 2*pi/NbCote 2d_poly_from xc + rayon,yc for t = 0 to 2*pi+.1 step p x = xc + rayon * cos(t) : y = yc + rayon * sin(t) : 2d_poly_to x,y next t END_SUB ' ****************************************************************************** ' Tracé d'un pentagramme (étoile à 5 sommets) ' Paramètres : ' xc,yc : coordonnées du centre du pentagramme ' rayon : rayon du cercle circonscrit au pentagramme ' Exemple d'appel : ' pentagramme(250,220,200)
SUB Pentagramme(xc,yc,rayon) dim_local x,y,t,pi,p pi = acos(-1) : p = 4*pi/5 2d_poly_from xc + rayon,yc for t = 0 to 4*pi step p x = xc + rayon * cos(t) : y = yc + rayon * sin(t) : 2d_poly_to x,y next t END_SUB ' ****************************************************************************** ' Tracé d'un coeur ' Paramètres : ' rx et ry détermine l'allure du coeur dans les sens horizontal et vertical ' epais détermine l'épaisseur du tracé en pixels ' la valeur de epais doit être compris entre 1 et 20, sinon elle sera de 5 pixels ' Exemple d'appel : ' Coeur(200,250,10)
SUB Coeur(rx,ry,epais) dim_local x,y,xc,yc,t,pi,p if (epais < 1) or (epais > 20) then epais = 5 pi = acos(-1) : p = pi/180 : xc = width(0)*.5 : yc = (ry+height(0))*.5 2d_poly_from xc,yc-ry : 2d_pen_color 255,0,0 : 2d_pen_width epais for t = 0 to 2*pi step p x = 4*cos(t)*cos(t)*sin(t)*sin(t)*sin(t) y = (3-2*cos(t)*cos(t))*cos(t)*cos(t) : 2d_poly_to xc+rx*x, yc-ry*y next t END_SUB ' ****************************************************************************** ' Conchoïde de rosace ' Courbe étudiée par Moritz en 1917 ' Autres noms : ' Pétale géométrique, courbe botanique, rosace de Troie (dans le cas e > 1) ' courbe cyclo-harmonique, sinusoïde circulaire ' ------------------------------------------------------------------------------ ' Equation polaire : rho = r *(1 + e * cos(n * theta)) avec n réel > 0 ' Paramètres : ' xc,yc : coordonnées du centre de la concoïde ' r : coefficient multiplicateur ' Exemple d'appel : ' Concoide(300,200,100)
SUB Concoide(xc,yc,r) dim_local pi,p,x,y,theta,rho,n,e pi = acos(-1) : p = pi/180 n = 9/7 : e = .8 : ' Modifier les valeurs de ces 2 constantes pour obtenir différentes formes theta = 0 : rho = (1+e*cos(n*theta)) : x = rho*cos(theta) : y = rho*sin(theta) 2d_poly_from xc+x*r, yc+y for theta = p to 20*pi step p rho = (1+e*cos(n*theta)) : x = rho*cos(theta) : y = rho*sin(theta) 2d_poly_to xc+r*x, yc+r*y next theta END_SUB ' ****************************************************************************** ' Tracé d'un papillon ' Paramètres : ' xc,yc : coordonnées du centre du papillon ' coef : coeffitient multiplicateur ' Exemple d'appel : ' Papillon(300,300,50)
SUB Papillon(xc,yc,coef) dim_local r,theta,x,y,pi,p pi = acos(-1) : p = pi/180 2d_poly_from xc,yc for theta = 0 to 20*pi step p r = exp(sin(theta)) - 2 * cos(4*theta) + sin(1/24 * power((2*theta - pi),5)) x = r*cos(theta) : y = r*sin(theta) 2d_pen_color rnd(255),rnd(155),rnd(25) : 2d_poly_to xc+coef*x,yc-coef*y next theta END_SUB ' ****************************************************************************** ' Tracé d'un napperon ' Paramètres : ' xc,yc : coordonnées du centre du napperon ' r : rayon du cercle circonscrit au napperon ' Exemple d'appel : Napperon(300,220,200)
SUB Napperon(xc,yc,r) dim_local a,b,x,y,n,pi,p,x0,y0 n = 25 : pi = acos(-1) : p = 2*pi/n for a = 0 to 2*pi step p x0 = xc + r * cos(a) : y0 = yc + r * sin(a) for b = a + p to 2 * pi - p step p x = xc + r * cos(b) : y = yc + r * sin(b) : 2d_line x0,y0,x,y next b next a END_SUB ' ****************************************************************************** ' Tracé d'un secteur circulaire ' Paramètres: ' xc,yc : coordonnées du centre du secteur ' deb,fin : respectivement angle de debut et angle de fin du tracé en DEGRES ' rayon : rayon du secteur ' REMARQUES : ' * Le sens du tracé est le sens trigonométrique (sens anti-horraire) ' * les angles deb et fin peuvent être positifs, négatifs ou nuls. ' * Ils peuvent être > 360° en valeur absolue. ' Exemple d'appel : ' Secteur_Circulaire(300,220,0,90,200) ' Secteur_Circulaire(300,220,60,120,150) ' Secteur_Circulaire(300,220,-30,-60,200) ' Secteur_Circulaire(300,220,-60,-30,200)
SUB Secteur_Circulaire(xc,yc,deb,fin,rayon) dim_local x,y,a,pi,rad,p pi = acos(-1) : rad = pi/180 : deb = mod(deb,360) : fin = mod(fin,360) if deb < 0 then deb = deb + 360 if fin < 0 then fin = fin + 360 if deb > fin then deb = deb - 360 2d_poly_from xc,yc for a = deb to fin x = rayon*cos(a*rad) : y = rayon*sin(a*rad) : 2d_poly_to xc+x,yc-y next a 2d_poly_to xc,yc END_SUB ' ******************************************************************************
@Ygeronimi Tu peux t’en servir pour Le Mag. | |
|