[Python] Problème interne / externe de figure ponctuelle système bidimensionnelle

Cliquez ici pour l'idée

environnement

python3.7

problème

Calculez si le __ point P </ font> __ dans la figure ci-dessous est à l'intérieur ou à l'extérieur de la figure. triangle.jpg

__O (0,0) __ représente __ origine __. De plus, __A (2,2) __, __B (3,1) __, __C (3,3) __ représentent les sommets de la __shape. __P (x, y) __ est __ point arbitraire __.

Calcul

Calculez de façon à ce que les directions des produits __outeurs soient les mêmes __ comme indiqué dans la figure ci-dessous. triangle3.jpg

Définition des coordonnées ↓

python


import numpy 

#Coordonnées du point A
A = numpy.array((6, 5))
#Coordonnées du point B
B = numpy.array((3, 1))
#Coordonnées du point C
C = numpy.array((9, 1))

Calcul du produit extérieur ↓

python


#Si le point P est dans la figure
def p(x, y):
    #Coordonnées du point P
    P = numpy.array((x, y))

    #Produit externe du vecteur BP et du vecteur BA
    abp = numpy.outer(P-B, A-B)
    #Produit extérieur du vecteur BC et du vecteur BP
    pbc = numpy.outer(C-B, P-B)
    #Produit extérieur du vecteur CA et du vecteur CP
    apc = numpy.outer(A-C, P-C)

    #Expression matricielle du produit externe du vecteur BP et du vecteur BA
    abp = numpy.linalg.det(abp)
    #Expression matricielle du produit externe du vecteur BC et du vecteur BP
    pbc = numpy.linalg.det(pbc)
    #Expression matricielle du produit externe du vecteur CA et du vecteur CP
    apc = numpy.linalg.det(apc)
    
    #Renvoie True si l'expression matricielle du produit extérieur du vecteur BP et du vecteur BA correspond au signe de l'autre expression matricielle
    if numpy.sign(abp)==numpy.sign(pbc) and numpy.sign(abp)==numpy.sign(pbc):
        return True
    #Renvoie False si l'expression matricielle du produit externe du vecteur BP et du vecteur BA ne correspond pas au signe de l'autre expression matricielle.
    else:
        return False 

Tout le code et les résultats

code

code.py


import numpy 

#Coordonnées du point A
A = numpy.array((6, 5))
#Coordonnées du point B
B = numpy.array((3, 1))
#Coordonnées du point C
C = numpy.array((9, 1))


#Si le point P est dans la figure
def p(x, y):
    #Coordonnées du point P
    P = numpy.array((x, y))

    #Produit externe du vecteur BP et du vecteur BA
    abp = numpy.outer(P-B, A-B)
    #Produit extérieur du vecteur BC et du vecteur BP
    pbc = numpy.outer(C-B, P-B)
    #Produit extérieur du vecteur CA et du vecteur CP
    apc = numpy.outer(A-C, P-C)

    #Expression matricielle du produit externe du vecteur BP et du vecteur BA
    abp = numpy.linalg.det(abp)
    #Expression matricielle du produit externe du vecteur BC et du vecteur BP
    pbc = numpy.linalg.det(pbc)
    #Expression matricielle du produit externe du vecteur CA et du vecteur CP
    apc = numpy.linalg.det(apc)
    
    #Renvoie True si l'expression matricielle du produit extérieur du vecteur BP et du vecteur BA correspond au signe de l'autre expression matricielle
    if numpy.sign(abp)==numpy.sign(pbc) and numpy.sign(abp)==numpy.sign(pbc):
        return True
    #Renvoie False si l'expression matricielle du produit externe du vecteur BP et du vecteur BA ne correspond pas au signe de l'autre expression matricielle.
    else:
        return False 


print(p(3, 1))#Résultat de sortie:True
print(p(2, 2))#Résultat de sortie:True
print(p(8,14))#Résultat de sortie:False

__Supplément __ Lorsque __point P est sur la ligne __, le point P est calculé comme __ dans la __figure.

Recommended Posts

[Python] Problème interne / externe de figure ponctuelle système bidimensionnelle
[Python] Détermine si un point de coordonnée est à l'intérieur ou à l'extérieur du polygone
Jugement intérieur / extérieur avec Python ➁: À propos des polygones en forme d'anneau