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...
cette première partie liste tous les segments possible.
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])])
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"
mais qui a terme devrait générer tous les groupes possibles.
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])
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
Partager