Mai 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | Calendrier |
|
| | Dessin d'arc | |
| | Auteur | Message |
---|
JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Dessin d'arc Sam 4 Avr 2020 - 19:18 | |
| Pour dessiner un arc de cercle dont on connait les coordonnées des extrémités et le rayon de courbure. Horizontalement ou verticalement. On peut ainsi dessiner des 'rectangles' aux côtés arrondis, etc: - Code:
-
DIM x1,y1,x2,y2,R WIDTH 0,800: HEIGHT 0,900 PICTURE 1: FULL_SPACE 1: 2D_TARGET_IS 1: ' 2D_FILL_OFF x1 = 200: y1 = 80: x2 = 600: y2 = 800 R = 800 2D_PEN_WIDTH 2 Arc(x1,y1,x2,y1,R,1): ' haut vers le haut Arc(x1,y1,x2,y1,R,2): ' haut vers le bas 2D_flood x1+20,y1,255,0,0 Arc(x1,y1,x1,y2,R,1): ' gauche vers la gauche Arc(x1,y1,x1,y2,R,2): ' gauche vers la droite 2D_flood x1,y1+20,255,0,0 Arc(x2,y1,x2,y2,R,1): ' droite vers la gauche Arc(x2,y1,x2,y2,R,2): ' droite vers la droite 2D_flood x2,y1+20,255,0,0 Arc(x1,y2,x2,y2,R,1): ' bas vers le haut Arc(x1,y2,x2,y2,R,2): ' bas vers le bas 2D_Flood x1+20,y2,255,0,0 2D_flood x1+100,y1+100,0,0,255 END ' ======================================================================= SUB Arc(x1,y1,x2,y2,R,sens) ' Tracé d'un arc de cercle entre deux points à l'horizontale ou verticale ' R = rayon de la courbure ' sens (courbure) =1: vers le haut ou la gauche, =2 vers le bas ou la droite DIM_LOCAL d,h,a,xc,yc,a1,a2 DEGREES d = SQR((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)): ' 1/2 distance entre les points h = SQR(R*R-d*d/4) a = 2*ASIN(d/(2*R)): ' angle total de l'arc IF x2 > x1: ' y2 = y1: sens horizontal xc = x1+(x2-x1)/2: yc = y1+h: a1 = 90+a/2 IF sens = 2 THEN yc = y1-h: a1 = 270+a/2 ELSE : ' x2 = x1: sens vertical yc = y1+(y2-y1)/2: xc = x1+h: a1 = 180+a/2 IF sens = 2 THEN xc = x1-h: a1 = a/2 END_IF a2 = a1-a 2D_ARC xc,yc,R,a1,a2 END_SUB ' ======================================================================= On peut choisir la position e l'arc, vers l'intérieur ou vers l'extérieur. Il est facile de calculer les coordonnées du centre du cercle, connaissant celles des extrémités et le rayon de courbure de l'arc. Dans mon cas, la ligne joignant les extrémités doit être horizontale ou verticale. Ce que je n'ai pas trouvé, c'est la formule (coordonnées du centre) dans le cas d'une ligne oblique. Et pourtant là aussi la position du centre est bien définie, il est à égale distance (= R) des deux points mais... ma trigo/géométrie est bien loin... | |
| | | papydall
Nombre de messages : 7006 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Dessin d'arc Sam 4 Avr 2020 - 23:47 | |
| - JL35 a écrit:
- Ce que je n'ai pas trouvé, c'est la formule (coordonnées du centre) dans le cas d'une ligne oblique.
Si j’ai bien compris (car ces jours-ci je n’arrive pas toujours à tout comprendre ), tu veux calculer les coordonnées du milieu M(xm,ym) d’un segment [AB] dont on connait les coordonnées des extrémités A(xa,ya) et B(xb,yb). Si c’est ça, alors, ce code est pour toi. "Elémentaire mon cher Watson" Si non, ... please reformule ta formule pour trouver la bonne formule. - Code:
-
dim xa,ya,xb,yb : ' coord des 2 points A(xa,ya) et B(xb,yb) dim xm,ym : ' coord du milieu de la droite AB picture 10 : full_space 10 : 2d_target_is 10 : print_target_is 10 : font_bold 10 font_color 10,0,0,255 xa = 50 : ya = 300 : print_locate xa+2,ya : print "A(xa,ya) = A(50,300)" xb = 450 : yb = 50 : print_locate xb+2,yb : print "B(xb,yb) = B(450,50)" 2d_line xa,ya,xb,yb xm = (xa+xb)/2 : ym = (ya+yb) /2 print_locate xm+2,ym : print "M(xm,ym) = M(250,175)" print_locate xm,ym+15 : print "xm = (xa+xb)/2 = (50+450) /2 = 250" print_locate xm,ym+30 : print "ym = (ya+yb)/2 = (300+50) /2 = 175"
2d_fill_color 255,0,0 2d_circle xa,ya,4 : 2d_circle xb,yb,4 : 2d_circle xm,ym,4 2d_fill_color 255,255,255 print_locate 20,350 : print "Formules donnant les coordonnées du milieu M du segment [AB]" 2d_rectangle 70,380,350,420 print_locate 80,390 : print "xm = (xa + xb) / 2" + string$(15," ") + "ym = (ya + yb) / 2"
| |
| | | JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Dessin d'arc Dim 5 Avr 2020 - 8:58 | |
| En posant ma question j'avais une sérieuse arrière-pensée pour toi papydall, même si ce n'est pas très loyal ! Désolé, je me suis mal exprimé, ce ne sont pas les coordonnées du centre du segment que je cherche, ça c'est facile, ce sont les coordonnées du centre de l'arc de cercle de rayon R passant par les extrémités du segment.
C'est facile si le segment est horizontal ou vertical (ce que j'ai fait plus haut), mais plus difficile si le segment est en biais. Je résume: - deux points dans l'espace (plan !), de coordonnées x1,y1 et x2,y2 - un cercle de rayon R qui passe par ces deux points - je cherche les coordonnées xc,yc du centre du cercle (pour pouvoir le tracer, ou seulement l'arc, dans ce cas l'angle est facile à trouver)
Il y a évidemment deux solutions symétriques par rapport au segment, suivant que l'arc est d'un côté ou de l'autre. | |
| | | papydall
Nombre de messages : 7006 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Dessin d'arc Dim 5 Avr 2020 - 10:17 | |
| Par deux points A et B passent une infinité de cercles. Mais quand on connait le rayon en plus, on a affaire non pas à un seul cercle mais bien deux : (c’est déjà mieux qu’une infinité !) Le centre de ces cercles se trouve sur la médiatrice du segment AB et les deux centres sont à la même distance d des points A et B. Pour des plus amples informations, rend-toi à ce site. Attention : tu ne dois pas te rendre ni à pieds, ni en voiture, mais en cliquant sur le lien ci-dessus | |
| | | JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Dessin d'arc Dim 5 Avr 2020 - 10:38 | |
| Merci mon ami papydall, je savais tout ça, je voulais seulement connaître les coordonnées des centres symétriques connaissant le rayon du cercle et celles des extrémités du segment.
Je vais regarder sur ton site si je rouve la solution toute faire, sinon il va bien me falloir refaire de la géométrie... Merci à toi en tout cas.
PS j'ai jeté un oeil, mais le moins que l'on puisse dire c'est que ce n'est pas simple comme explications, c'est même plutôt alambiqué ! Je vais essayer de trouver une solution moi-même...plus simple si possible ! | |
| | | jjn4
Nombre de messages : 2703 Date d'inscription : 13/09/2009
| Sujet: Re: Dessin d'arc Dim 5 Avr 2020 - 15:22 | |
| Ouah, jolie figure ! Et bien, les arcs de cercle ! Sans aucunement vouloir interférer dans vos performances mathématiques. J'y ajoute mon grain de sel, mais juste pour faire joli ! | |
| | | JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Dessin d'arc Dim 5 Avr 2020 - 16:16 | |
| Salut jj, On dirait un personnage de livre pour les enfants martiens... | |
| | | papydall
Nombre de messages : 7006 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Dessin d'arc Dim 5 Avr 2020 - 16:20 | |
| @ JL35 Tu sais comment trouver le centre du cercle pour un arc dont les extrémités sont à la verticale (ou à l’horizontale). Tu désires déterminer le centre du cercle pour un arc dont les extrémités sont obliques c’est à dire que le segment à subi une rotation d’un certain angle disons theta pour fixer les idées. Le centre à chercher serait le même centre mais avec une rotation du même angle theta On doit donc déterminer deux choses : l’angle de rotation, puis on applique la matrice de rotation aux coordonnées du centre du cercle initialement connu. Rappel : Soit (x,y) les coordonnées du point avant rotation Soit (x1,y1) les nouvelles coordonnées du point après rotation d’un angle thêta. On applique la matrice de rotation au couple (x,y) pour déterminer celui (x1,y1) X1 = x * cos(theta) – y * sin(theta) Y1 = x * sin(theta) + y* cos(theta) Le sens de rotation du segment est le sens anti-horaire si theta est positif et dans le sens horaire si theta est négatif. Si tu peux explorer cette piste, tu pourrais peut-être trouver la solution @jjn4 C'est ton futur engin pour la planète Mars ? Sans rapport aucun avec le sujet sur les arcs et les cercles, voici - Le cercle tournant:
- Code:
-
rem ================================================================= rem Cercle tournant rem ================================================================= dim r1 : r1 = 150 : ' modifier ces ... dim r2 : r2 = 150 : ' ... constantes dim p : p = 6 : ' essayer 2,3,4,5,6,7,8,9,10,etc. dim xc,yc, a,b,n,m,x,y
caption 0,"Cercle tournant" width 0,700 : height 0,700 picture 10 : full_space 10 : 2d_target_is 10 : color 10,0,0,0 : 2d_pen_color 255,255,255 xc = width_client(10)/2 : yc = height_client(10)/2 degrees 2d_poly_from xc + r2 + r1,yc for n = 0 to 360 step p x = cos(n) * r1 y = sin(n) * r1 for m = 0 to 360 a = cos(m) * r2 b = sin(m) * r2 2d_poly_to xc + a + x, yc + b + y next m display next n
rem ===================================================================
| |
| | | JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Dessin d'arc Dim 5 Avr 2020 - 16:59 | |
| Merci papydall, ça c'est une piste intéressante, je vais étudier ça. J'avais pensé naïvement que du fait que c'est très facile à tracer on pouvait trouver une formule algébrique fonction de x1,y1,x2,y2 et R qui donnerait les coordonnées du centre. Je vais voir avec les angles, merci encore.
Joli le cercle tournant ! | |
| | | silverman
Nombre de messages : 968 Age : 51 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Dessin d'arc Lun 6 Avr 2020 - 0:30 | |
| - JL35 a écrit:
- J'avais pensé naïvement que du fait que c'est très facile à tracer on pouvait trouver une formule algébrique
fonction de x1,y1,x2,y2 et R qui donnerait les coordonnées du centre. Peut-être comme ça: - Code:
-
' http://villemin.gerard.free.fr/GeomLAV/Cercle/Centre.htm#R2P1 ' Deux points quelconques et le rayon – Méthode par la médiatrice
dim r,xa,xb,ya,yb,k,h,m,n,p,x0,y0,x1,y1,ad,aa
degrees : 2d_fill_off
' rayon du cercle passant par les extrémités du segment r=150
' coordonnées des extrémités du segment xa=100 : ya=200 xb=150 : yb=350
' calcul k=(xa-xb) / (yb-ya) h=((xb*xb)-(xa*xa)+(yb*yb)-(ya*ya)) / (2*(yb-ya))
m=(k*k)+1 n=(0-2*xa) + (2*k*h) - (2*k*ya) p=(xa*xa) + (ya*ya) -(2*h*ya) + (h*h) - (r*r)
' coordonnées des centres des cercles à gauche et à droite du segment: ' S1 x1= (0-n - sqr((n*n) - 4*m*p)) / (2*m) y1= (k*x1) + h print "S1 : ",x1," ",y1
' S0 x0= (0-n + sqr((n*n) - 4*m*p)) / (2*m) y0= (k*x0) + h print "S0 : ",x0," ",y0
' tracé du segment 2d_pen_color 0,0,255 ligne(xa,ya,xb,yb)
' tracé d'un arc de cercle 2d_pen_color 0,0,0 cercle(x1,y1,2) :' montre le centre du cercle de coordonnée x1,y1 ad= asin((yb-y1)/r) aa= asin((ya-y1)/r) arc(x1,y1,r,ad,aa) :' arc de cercle passant par les extrémités du segment
' tracé d'un arc de cercle 2d_pen_color 255,0,0 cercle(x0,y0,2) :' montre le centre du cercle de coordonnée x0,y0 ad= 180-asin((ya-y0)/r) aa= 180-asin((yb-y0)/r) arc(x0,y0,r,ad,aa) :' arc de cercle passant par les extrémités du segment
END sub cercle(x1,y1,ray) 2d_circle x1,height_client(0)-y1,ray end_sub
sub ligne(x1,y1,x2,y2) 2d_line x1,height_client(0)-y1,x2,height_client(0)-y2 end_sub
sub arc(x1,y1,ray,ad,aa) 2d_arc x1,height_client(0)-y1,ray,ad,aa end_sub | |
| | | JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Dessin d'arc Lun 6 Avr 2020 - 10:44 | |
| Merci silveerman !
Je venais d'arriver à une solution à peu près convenable, mais pas aussi aboutie que la tienne. Je vais regarder de plus près, merci encore. | |
| | | Contenu sponsorisé
| Sujet: Re: Dessin d'arc | |
| |
| | | | Dessin d'arc | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |