|
Listing GFA-Basic, Faites un copier-coller ou cliquez ici pour télécharger le fichier linecerc.lst |
|
' Intersection d'une ligne et d'un cercle ' ' Dêmonstration en GFA-Basic par Nicolas Rey - 05/12/2002 ' http://scalion.free.fr ' ' Informations collectêes sur le site de Paul Bourke ' http://astronomy.swin.edu.au/~pbourke/geometry/sphereline/ ' FULLW #1 x3 = 300,y3 = 200,r = 50 DO mx1% = MX%,my1% = MY% MOUSE MX%,MY%,MK% IF MX% <> mx1% OR MY% <> my1% CLS x1 = 0,y1 = 200 + r,x2 = MX%,y2 = MY% NORMALISER x1,y1,x2,y2 AFFICHER_LIGNE x1,y1,x2,y2 CIRCLE x3,y3,r a = (x2 - x1) ^ 2 + (y2 - y1) ^ 2 b = 2 * ( (x2 - x1) * (x1 - x3) + (y2 - y1) * (y1 - y3) ) c = x3 ^ 2 + y3 ^ 2 + x1 ^ 2 + y1 ^ 2 - 2 * (x3 * x1 + y3 * y1 ) - r ^ 2 v = b * b - 4 * a * c IF v >= 0 PRINT "INTERSECTION !" U = (-b - SQR(b ^ 2 - 4 * a * c)) / (2 * a) ix = x1 + U * (x2 - x1),iy = y1 + U * (y2 - y1) CIRCLE ix,iy,5 ? "u = ";U IF v = 0 ? "TANGEANTE" ENDIF ELSE PRINT "EN DEHORS..." ? "u = Pas de solution" ENDIF ENDIF EXIT IF MK% <> 0 LOOP CLOSEW #1 PROCEDURE AFFICHER_LIGNE(x1,y1,x2,y2) LOCAL U,px,py FOR U = 0 TO 500 px = x1 + U * (x2 - x1),py = y1 + U * (y2 - y1) PLOT px,py NEXT U RETURN PROCEDURE NORMALISER(VAR x1,y1,x2,y2) LOCAL lx,ly,h lx = x2 - x1,ly = y2 - y1 h = SQR(lx ^ 2 + ly ^ 2) IF h > 0 x2 = x1 + lx / h,y2 = y1 + ly / h ELSE x2 = x1 + 1 ENDIF RETURN |