Bonjour à tous,
Je suis tous neuf dans python, et j'essaye de réaliser un programme qui lorsqu'on lui soumet des coordonnées de points, il compte le maximum de triangle non-sécant (pouvant être inscrit).

Jusqu'ici, je fonctionne au pas à pas...

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
from sympy import *
from sympy.geometry import *
from sympy.plotting import *
import sys
sys.setrecursionlimit(10000)
 
p = [Point(45489772381, -736449623108), Point(45489772381, -736136770248), Point(455065875115, -736292552948), Point(454927507396, -736292552948), Point(454956086125, -736292552948), Point(454956086125, -736344480515), Point(454956086125, -736240625381), Point(454974435912, -736363148689), Point(454974435912, -736221957207), Point(454990378684, -736274957657), Point(454990378684, -736310148239)]
l = 0
seg = []
group = []
 
for i in range(0, len(p)-1):
   for j in range (i+1, len(p)):
      l += 1
      seg.extend([Segment(p[i] , p[j])])
cette première partie liste tous les segments possible.

puis dans un premier temps je voudrais effacer tous les segments qui se croisent et en faire des groupes
d'où la fonction suivante qui pour le moment devrait juste nettoyer la liste primaire de tous les liens qui croisent les segments précédements "admis"
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
 
group = []
group.append(seg)
 
def main():
    tabl = []
    cleancrossed(tabl)
 
def cleancrossed(tabl):
    print len(tabl)
    temp = tabl
    for i in range(0, len(tabl)-1):
       for j in range (i+1, len(tabl)):
          for element in intersection(seg[i], seg[j]):
             if element in p:
                test = len(tabl)
             else :
                print seg[j]
                tabl = [x for x in temp if x != seg[j]]
                return cleancrossed(tabl);
    return;
 
cleancrossed(group[0])
print group[0]
print len(group[0])
mais qui a terme devrait générer tous les groupes possibles.

Donc pour le moment je bloque dans cette fonction car elle reprend toujours au même point;

Dans le cas ci dessus la liste primaire fait 55 éléments, la fonction tourne une première fois retire le premier segment secant, puis reprend la fonction avec une liste de 54 éléments, puis ça boucle à 54....
Pourquoi je ne sais pas....

Je pense que ça doit être au niveau de ma compréhension des variables, mais je trouve pas de solution... Si quelqu'un peut trouver une solution et m'expliquer, je serais le plus heureux!

Merci