bonjour à tous,
un probléme avec ce code chargé de vérifier si un point est à l'intérieur d'un polygone

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import numpy
import math
# P1 et P2 sont représentés par des listes sous la forme :
P1=[[0 ,0],[10 ,0],[20,10],[10,20],[0,20],[-10,10],[-10,0]]    #[A,B]
P2=[[0 ,0 ],[0 ,10 ],[5,10],[0,0]]
 
m=len(P1)
n=len(P2)
 
A=P1[:]          #on prend tout P1 dans A puisqu'on a besoin du dernier vecteur pour retourner à [0,0]
B=P1[1:]         #on doit placer le dernier point B à l'origine
B.append([0,0]) #on ajoute donc [0,0] à la fin de la liste B
 
C=P2[:]          #on prend tout P2 dans C puisqu'on a besoin du dernier vecteur pour retourner à [0,0]
D=P2[1:]         #on doit placer le dernier point D à l'origine
D.append([0,0]) #on ajoute donc [0,0] à la fin de la liste D
 
def Orientation (M,N,P):
    angle_rad=[]
    for i in range (len(P)):    # P permet d'utiliser la fonction pour P1 et P2
        angle_rad.append(math.atan2(N[i][1]-M[i][1],N[i][0]-M[i][0]))   #retourne atan(y / x). Le vecteur du plan allant de l’origine vers le point (x, y) forme cet angle avec l’axe X positif. 
    return angle_rad
 
def Norme (M,N,P):
    norme=[]
    for i in range (len(P)):    # P permet d'utiliser la fonction pour P1 et P2
        norme.append(math.sqrt((N[i][0]-M[i][0])**2+(N[i][1]-M[i][1])**2))
    return norme
 
#Q11
segNFP=[]
for i in range (m):
    segNFP.append([Orientation(A,B,P1)[i], Norme(A,B,P1)[i]])
for i in range (n):
    segNFP.append([Orientation(C,D,P2)[i], Norme(C,D,P2)[i]])
print ('segNFP=''\n',numpy.around(segNFP,3))
 
#tri par insertion des segments
def tri_ins(L):
    for k in range(1,len(L)):
        temp=L[k]
        j=k
        while j>0 and temp<L[j-1]:
            L[j]=L[j-1]
            j-=1
        L[j]=temp
    print ('liste triée','\n',numpy.around(L,3))
    return L
 
segNFP_tri=tri_ins(segNFP)
 
# Q14
n=len(segNFP_tri)
NFP=[]
coord=[]
for i in range(n):
    angle=segNFP_tri[i][0]  # on reprend les angles et les normes dans le tableau
    norme=segNFP_tri[i][1]  #des segments triés à la question précédente
    coord.append([[norme*math.cos(angle)],[norme*math.sin(angle)]]) #calcul du point suivant
    NFP.append([coord[i][0],coord[i][1]])#on ajoute les coordonnées (x,y) dans un tableau NFP
print ('coordonnées des points du polygone''\n',numpy.around(NFP))
 
#Q16
def TestPoly(M,poly):
    n=len(poly)             #n points
    angle_tot=0
    for i in range(n-1):    #n-1 segments 
        angle_deb=Orientation(M,poly[i],P1)    #si un point est strictement à l’intérieur d’un polygone, alors la somme des angles orientés formés par ce point et chacun des sommets consécutifs du polygone est nulle (ou égale à 2pi)
        angle_fin=Orientation(M,poly[i+1],P1)
        angle_tot=angle_tot+(angle_fin-angle_deb)
    resultat=False  #valeur de resultat par défaut
    if abs(angle_tot)<1e-10 or  abs(angle_tot-2*pi)<1e-10: #valeur proche de 0 ou 2.pi a cause des erreurs d'arrondis
        resultat=True
    return resultat
 
TestPoly(P2[0],P1)
La console me retourne

angle_rad.append(math.atan2(N[i][1]-M[i][1],N[i][0]-M[i][0]))
TypeError: 'int' object is not subscriptable

Merci d'avance pour votre aide.