[Python] Internes / externes Problem der zweidimensionalen Systempunktfigur

Klicken Sie auf hier für die Idee

Umgebung

python3.7

Problem

Berechnen Sie, ob der __ Punkt P </ font> __ in der folgenden Abbildung innerhalb oder außerhalb der Abbildung liegt. triangle.jpg

__O (0,0) __ steht für __ Ursprung __. Außerdem repräsentieren __A (2,2) __, __B (3,1) __, __C (3,3) __ die Eckpunkte der __Form. __P (x, y) __ ist __ beliebiger Punkt __.

Berechnung

Berechnen Sie so, dass die Richtungen der __outer-Produkte dieselben __ sind wie in der folgenden Abbildung gezeigt. triangle3.jpg

Definition der Koordinaten ↓

python


import numpy 

#Koordinaten von Punkt A.
A = numpy.array((6, 5))
#Koordinaten von Punkt B.
B = numpy.array((3, 1))
#Koordinaten von Punkt C.
C = numpy.array((9, 1))

Berechnung des äußeren Produkts ↓

python


#Ob der Punkt P in der Figur ist
def p(x, y):
    #Koordinaten von Punkt P.
    P = numpy.array((x, y))

    #Äußeres Produkt des Vektors BP und des Vektors BA
    abp = numpy.outer(P-B, A-B)
    #Äußeres Produkt von Vektor BC und Vektor BP
    pbc = numpy.outer(C-B, P-B)
    #Äußeres Produkt von Vektor CA und Vektor CP
    apc = numpy.outer(A-C, P-C)

    #Matrixexpression des äußeren Produkts von Vektor BP und Vektor BA
    abp = numpy.linalg.det(abp)
    #Matrixexpression des äußeren Produkts von Vektor BC und Vektor BP
    pbc = numpy.linalg.det(pbc)
    #Matrixexpression des äußeren Produkts von Vektor CA und Vektor CP
    apc = numpy.linalg.det(apc)
    
    #Gibt True zurück, wenn der Matrixausdruck des äußeren Produkts von Vektor BP und Vektor BA mit dem Vorzeichen des anderen Matrixausdrucks übereinstimmt
    if numpy.sign(abp)==numpy.sign(pbc) and numpy.sign(abp)==numpy.sign(pbc):
        return True
    #Gibt False zurück, wenn der Matrixausdruck des äußeren Produkts von Vektor BP und Vektor BA nicht mit dem Vorzeichen des anderen Matrixausdrucks übereinstimmt.
    else:
        return False 

Alle Codes und Ergebnisse

Code

code.py


import numpy 

#Koordinaten von Punkt A.
A = numpy.array((6, 5))
#Koordinaten von Punkt B.
B = numpy.array((3, 1))
#Koordinaten von Punkt C.
C = numpy.array((9, 1))


#Ob der Punkt P in der Figur ist
def p(x, y):
    #Koordinaten von Punkt P.
    P = numpy.array((x, y))

    #Äußeres Produkt des Vektors BP und des Vektors BA
    abp = numpy.outer(P-B, A-B)
    #Äußeres Produkt von Vektor BC und Vektor BP
    pbc = numpy.outer(C-B, P-B)
    #Äußeres Produkt von Vektor CA und Vektor CP
    apc = numpy.outer(A-C, P-C)

    #Matrixexpression des äußeren Produkts von Vektor BP und Vektor BA
    abp = numpy.linalg.det(abp)
    #Matrixexpression des äußeren Produkts von Vektor BC und Vektor BP
    pbc = numpy.linalg.det(pbc)
    #Matrixexpression des äußeren Produkts von Vektor CA und Vektor CP
    apc = numpy.linalg.det(apc)
    
    #Gibt True zurück, wenn der Matrixausdruck des äußeren Produkts von Vektor BP und Vektor BA mit dem Vorzeichen des anderen Matrixausdrucks übereinstimmt
    if numpy.sign(abp)==numpy.sign(pbc) and numpy.sign(abp)==numpy.sign(pbc):
        return True
    #Gibt False zurück, wenn der Matrixausdruck des äußeren Produkts von Vektor BP und Vektor BA nicht mit dem Vorzeichen des anderen Matrixausdrucks übereinstimmt.
    else:
        return False 


print(p(3, 1))#Ausgabeergebnis:True
print(p(2, 2))#Ausgabeergebnis:True
print(p(8,14))#Ausgabeergebnis:False

__Ergänzung __ Wenn sich __Punkt P auf der Linie __ befindet, wird Punkt P in der __Figur als __ berechnet.

Recommended Posts

[Python] Internes / externes Problem der zweidimensionalen Systempunktfigur
[Python] Bestimmen Sie, ob sich ein Koordinatenpunkt innerhalb oder außerhalb des Polygons befindet
Innen- / Außenbeurteilung mit Python ➁: Über Donut-förmige Polygone