Connaitre l'angle d'un segment de ligne
en GFA-Basic



Page d'accueil


Utile, par exemple, pour calculer la luminosité d'une surface (en utilisant l'angle d'un segment on sait dans quelle direction il est exposé) .

LISTING
Faites un Copier-Coller
FUNCTION angle(x1,y1,x2,y2)
 LOCAL
lx,a,h
 lx
= x2 - x1
 h
= SQR(lx ^ 2 + (y2 - y1) ^ 2)
 IF
h > 0
   
lx = lx / h
   
IF y2 > y1
     a
= ASIN(lx)
   ELSE
     
a = PI - ASIN(lx)
   ENDIF
 ENDIF
 RETURN
a
ENDFUNC



Exemple d'utilisation de cette fonction
Faites un Copier-Coller
scrx% = _X
scry% = _Y
OPENW #1,0,0,
srcx%,scry%,0
FULLW #1
FOR
z = 600 TO 1 STEP -0.1
 FOR
x = 0 TO scrx% STEP 5
   
x1 = x
   x2
= x + 5
   
y1 = @alty(x1,z)
   
y2 = @alty(x2,z)
   
a = FN angle(x1,y1,x2,y2)
   RGBCOLOR RGB(127 + SIN(
a + 1) * 127,0,0)
   LINE
x1,y1,x2,y2
 
NEXT x
NEXT z
KEYGET rien%
CLOSEW #1
FUNCTION
alty(x,z)
 LOCAL
h
 h
= SIN(SQR((x - (scrx% / 2)) ^ 2 + (z - 300) ^ 2) / 100) * COS(SQR(x ^ 2 + z ^ 2) / 100) * 100
 RETURN  
scry% / 2  - z + scry% / 2 - SIN(h / 10 + COS(h / 3) / 10) * 100 * SIN(COS(100 - h / 50))
ENDFUNC
FUNCTION
angle(x1,y1,x2,y2)
 LOCAL
lx,a,h
 lx
= x2 - x1
 h
= SQR(lx ^ 2 + (y2 - y1) ^ 2)
 IF
h > 0
 
lx = lx / h
   
IF y2 > y1
     a
= ASIN(lx)
   ELSE
     
a = PI - ASIN(lx)
   ENDIF
 ENDIF
 RETURN
a
ENDFUNC