Reconnaissance de formes en python
deristix
Messages postés
55
Date d'inscription
Statut
Membre
Dernière intervention
-
deristix Messages postés 55 Date d'inscription Statut Membre Dernière intervention -
deristix Messages postés 55 Date d'inscription Statut Membre Dernière intervention -
Bonjour, j'aimerai grâce à ce programme pouvoir reconnaître dans un nuage de points certaines figures présentes dans le programme et les relier dans le nuage de point.
Pourriez vous m'aider ?
Merci.
#ce programme sert à reconnaitre des figures géométriques particulières dans un nuage de points import pandas as pd df = pd.read_csv("monFichier_test.csv") print (df) '''cette fonction permet de definir un carré''' def test_carré(xA,yA,xB,yB,xC,yC,xD,yD): a=((xB-xA)**2+(yB-yA)**2) b=((xC-xB)**2+(yC-yB)**2) c=((xD-xC)**2+(yD-yC)**2) d=((xA-xD)**2+(yA-yD)**2) if a==b==c==d and ((xC-xB)*(xD-xC)+(yC-yB)*(yD-yC))==0 and ((xB-xA)*(xA-xD)+(yB-yA)*(yA-yD))==0: return True else: return False '''cette fonction permet de definir un rectangle ''' def test_rectangle(xA,yA,xB,yB,xC,yC,xD,yD): a=((xB-xA)**2+(yB-yA)**2) b=((xC-xB)**2+(yC-yB)**2) c=((xD-xC)**2+(yD-yC)**2) d=((xA-xD)**2+(yA-yD)**2) if a==c and b==d and ((xC-xB)*(xD-xC)+(yC-yB)*(yD-yC))==0 and ((xB-xA)*(xA-xD)+(yB-yA)*(yA-yD))==0: return True else: return False '''cette fonction permet de definir un triangle rectangle''' def test_trianglerectangle(xA,yA,xB,yB,xC,yC): a=((xB-xA)**2+(yB-yA)**2) b=((xC-xB)**2+(yC-yB)**2) c=((xA-xC)**2+(yA-yC)**2) if b*b==a*a+c*c and ((xB-xA)*(xC-xA)+(yB-yA)*(yC-yA))==0: return True else: return False from itertools import* def polygone_find(A): n=len(A) B=list(range(0,n,2)) trianglerectangle=[] carré=[] rectangle=[] RESULTAT={} '''je fais la recherche de triangles rectangles''' C=list(combinations(B,3)) for tri in C: xA=A[tri[0]] yA=A[tri[0]+1] xB=A[tri[1]] yB=A[tri[1]+1] xC=A[tri[2]] yC=A[tri[2]+1] print("av",xA,yA,xB,yB,xC,yC) if test_trianglerectangle(xA,yA,xB,yB,xC,yC): test_trianglerectangle.append((tri[0],tri[1],tri[2])) RESULTAT.update({"trianglerectangle":trianglerectangle}) '''je fais la recherche de carré''' C=list(combinations(B,3)) for tri in C: xA=A[tri[0]] yA=A[tri[0]+1] xB=A[tri[1]] yB=A[tri[1]+1] xC=A[tri[2]] yC=A[tri[2]+1] xD=A[tri[3]] yD=A[tri[3]+1] print("av",xA,yA,xB,yB,xC,yC,xD,yD) if test_carré(xA,yA,xB,yB,xC,yC,xD,yD): carré.append((tri[0],tri[1],tri[2],tri[3])) RESULTAT.update({"carré":carré}) '''je fais la recherche de rectangle''' C=list(combinations(B,3)) for tri in C: xA=A[tri[0]] yA=A[tri[0]+1] xB=A[tri[1]] yB=A[tri[1]+1] xC=A[tri[2]] yC=A[tri[2]+1] xD=A[tri[3]] yD=A[tri[3]+1] print("av",xA,yA,xB,yB,xC,yC,xD,yD) if test_rectangle(xA,yA,xB,yB,xC,yC): rectangle.append((tri[0],tri[1],tri[2],tri[3])) RESULTAT.update({"rectangle":rectangle}) '''la structure retournée est le dictionnaire RESULTAT''' return(RESULTAT) import matplotlib.pyplot as plt x = [47.17788031846174 ,9.155162513788252 ,87.31106451765086 ,90.18098777410545 ,85.73425568394163 ,69.21660923542944 ,87.42386051005897 ,35.27685634185226 ,83.01845522622216 ,45.32537448340496 ,51.322646552859695 ,69.9527028251635 ,3.08569815272679 ,66.30463831578771 ,62.41033400206221 ,80.05712601988002 ,10 ,10 ,70 ,10 ,30 ,90 ,70 ,30 ,70 ,89.11423668645706 ,92.58342391495769 ,44.22604145548783 ,95.42720095700402 ,21.435826737054732 ,19.37910846507328 ,48.943206051376606 ,97.68362835412275 ,72.59631895251266 ,63.809973321904366 ,31.42076659631765 ,83.88946390215908 ,62.116866264263216 ,16.46862820087156] y = [7.856866949374341 ,32.60533028920386 ,7.9593054773530625 ,97.74037355348855 ,11.752247867249043 ,19.38838353746982 ,23.839873731365046 ,13.752179944089926 ,31.00629476536042 ,9.428326440424428 ,59.5011025964827 ,73.64015636941087 ,55.46780269542562 ,28.89261106782417 ,41.65910883295687 ,2.6141574612408958 ,10 ,70 ,10 ,10 ,50 ,50 ,10 ,10 ,50 ,73.20222328424518 ,16.76132763110746 ,1.0615177467627968 ,17.271594103822896 ,14.310405723515663 ,57.269925634522856 ,82.43371784928712 ,48.3488192958625 ,56.325210197081134 ,12.977441456959616 ,59.135914263212065 ,23.574727012142937 ,45.42966847449507 ,63.35434423882829] plt.scatter(x,y) plt.title('poco y para avec Matplotlib') plt.xlabel('x') plt.ylabel('y') plt.savefig('ScatterPlot_01.png') plt.show()
A voir également:
- Reconnaissance de formes en python
- Reconnaissance musique en ligne sans télécharger - Guide
- Citizen code python avis - Accueil - Outils
- Mise en forme conditionnelle excel - Guide
- Logiciel de reconnaissance de texte - Télécharger - Divers Bureautique
- Mise en forme tableau word - Guide
2 réponses
Bonjour,
Je pense que la question est, étant donné une liste de points dans le plan, comment détecter les quadruplets qui forment un rectangle, les quadruplets qui forment un carré, les triplets qui forment un triangle rectangle.
Mais il y a plein de choses qui ne vont pas dans le code actuel :
- test_carré : mauvaise idée d'utiliser des caractères accentués pour nommer des fonctions python
- C'est un peu dommage de chercher les carrés alors que ce sont des cas particuliers de rectangle. Il vaudrait mieux chercher les rectangles, puis parmi eux les carrés ce serait bien plus efficace.
- l66 et l81 : vu qu'on cherche des quadruplets, c'est probablement plutôt combinations(B, 4)
- test_trianglerectangle :
- C'est un peu dommage de chercher des triangles rectangles si on a déjà localisé les carrés et les rectangles, car chaque carré (resp. rectangle) induit 4 triangles rectangles. Vu que combinations a une complexité exponentielle, il faut éviter autant que possible de l'utiliser, là où un simple parcours (linéaire) sur la liste de rectangles et de carré est normalement suffisant pour caractériser les 4 triangles.
- Reste cependant le cas où l'on a trois points isolés. Du coup, le mieux serait de d'abord chercher les triangles rectangles. Parmi eux, on cherche lesquels partagent un bord commun et si leur réunion permet de former un rectangle ou un carré
Bonne chance
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
as-tu une question?
Merci,
pour l'aide et les les remarques j'essaierai de les corriger.