Vérifier si un point et au dessus ou au dessous d'une droite avec python

Dans cet article on va voir comment créer un algorithme pour vérifier si un point et au dessus ou au dessous d'une droite en mathématiques. Pour cela considérons la droite définie par l'équation y=f(x)=a*x+b, on dit qu'un point P de coordonnées (xp,yp) est au dessous de la droite si (voir figure 1):

yp - ( a * xp + b ) < 0

qu'on peut aussi pour simplifier écrire:

yp - f(xp) < 0

De même on dit qu'un point P de coordonnées (xp,yp) est au dessus de la droite si (voir figure 2):

yp - ( a * xp + b ) > 0

qu'on peut aussi pour simplifier écrire:

yp - f(xp) > 0

Un point P de coordonnées (xp,yp) est sur la droite si et seulement si:

yp - f(xp) = 0

Connaissant ces règles on peut alors écrire un simple algorithme par exemple en utilisant le langage python pour déterminer si un point et au dessus ou au dessous d'une droite :

Figure 1: Algorithme pour vérifier si un point et au dessus ou au dessous d'une droite: Exemple 1 avec P(6,3) et la droite y=0.5*x+2
Figure 1: Algorithme pour vérifier si un point et au dessus ou au dessous d'une droite: Exemple 1 avec P(6,3) et la droite y=0.5*x+2

Figure 2: Algorithme pour vérifier si un point et au dessus ou au dessous d'une droite: Exemple 1 avec P(9,9) et la droite y=0.5*x+2
Figure 2: Algorithme pour vérifier si un point et au dessus ou au dessous d'une droite: Exemple 1 avec P(9,9) et la droite y=0.5*x+2

>>> import numpy as np
 >>> def function( x ):
...     return 0.5 * x + 2
... 
 >>> x = np.arange(0,10,0.1)
 >>> y = function(x)
 >>> xp = 6.0 
 >>> yp = 3.0 
 >>> print 'Point est au dessus de la ligne ?: ', yp - function(xp) > 0 
 Point est au dessus de la ligne ?:  False
 >>> print 'Point est en dessous de la ligne ?: ', yp - function(xp) < 0 
 Point est en dessous de la ligne ?:  True
 >>> print 'Point est sur la ligne ?: ', yp - function(xp) == 0 
 Point est sur la ligne ?:  False

Simple script python permettant de tracer les figures 1 et 2 avec matplotlib:

import matplotlib.pyplot as plt
import numpy as np

#----- Straight Line -----#

def function( x ):
    return 0.5 * x + 2

x = np.arange(0,10,0.1)
y = function(x)

plt.plot(x, y, 'k-', lw=2)

#----- Point 1 -----#

xp = 6.0 
yp = 3.0

print 'Point est au dessus de la ligne ?: ', yp - function(xp) > 0 
print 'Point est en dessous de la ligne ?: ', yp - function(xp) < 0 
print 'Point est sur la ligne ?: ', yp - function(xp) == 0

plt.scatter(xp,yp)
plt.plot( (xp,xp), (0,yp), 'b--', lw=1) 
plt.plot( (0,xp), (yp,yp), 'b--', lw=1) 
plt.plot( (0,xp), (function(xp),function(xp)), 'b--', lw=1) 
plt.plot( (xp,xp), (0,function(xp)), 'b--', lw=1) 
plt.text( xp+0.2, yp, 'P') 
plt.text( xp+0.2, 0.2, 'xp') 
plt.text( -0.4, yp, 'yp') 
plt.text( -0.6, function(xp), 'f(xp)')

plt.xlim(0,10)
plt.ylim(0,10)

plt.savefig('output.png')
plt.show()

Références

Liens Site
Point par rapport à une droite developpez
Image

of