ATOUTFOX COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO Visual FoxPro : le développement durable |
|||||||||||||
|
|||||||||||||
Calcul d'une distance a une droite (pour Fred) |
|||||||||||||
|
|||||||||||||
www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2024. |
j'ai fait un petit correctif dans la procedure de calcul.
je teste les horizontales et verticales en entrée, ceci pour eviter le test sur le divisions par 0.
Encore merci pour ton aide Francis
Petit correctif avant le * affiche D
En testant en entrée, ça évite de se tester les divisions par zero
IF x1=x2
distance = IIF(x3>x1, x3-x1, x1-x3)
x4=x1
y4=y3
fa=9999999
fc=0
fb=x4
fd=y4
ELSE
IF y1=y2
distance = IIF(y3>y1, y3-y1, y1-y3)
y4=y3
x4=x3
fa=0
fc=9999999
fb=y4
fd=x4
ELSE
* Formule : recherche de D(x4,y4) point de la droite AB perpendiculaire a CD
* calcul de a
* Fa = (y2 - y1) / (x2 - x1)
Fa = (y2 - y1) / (x2 - x1)
* calcul de b
* Fb = y1 -ax1 = y2 -ax2
Fb = y1 - Fa * x1
* calcul de c (ortho) => c= -1/a
Fc = -1 / Fa
* calcul de d
* Fd = y3 -cx3
Fd = y3 - Fc * x3
* calcul de x4
* y4 = cx4 + d et y4 = ax4 + b (car point D commun au 2 droites)
* x4 = (b-d) / (c-a)
x4 = (Fb-Fd) / (Fc-Fa)
* calcul de y4 = cx4 + d
y4 = Fc * x4 + Fd
* Distance
* d =
Distance = sqrt((x3-x4)^2+(y3-y4)^2)
ENDIF
ENDIF
* affiche D
.....