04-07-2014, 11:33 AM
Les constellations ne sont pas des étoiles proches physiquement: ce sont uniquement des étoiles dont le projeté 2D est proche:
Sinon, si on ne considère pas la 3D (j'ai moi non plus pas lu le code, mais au survol, beaucoup de lignes sont copiées-collées: classes, fonctions et commentaires le simplifieront énormément), oublie tout algorithme intuitif du type "prendre les 3 points les plus proches de chaque étoile" (la taille des constellations va exploser).
Je ne sais pas si "tes cours de maths étant loin", tu sauras construire ton algo à partir d'une courte présentation des algorithmes de partitionnements (les k-moyennes sont probablement les plus aisées à implémenter).
Une idée simple serait alors de faire les k-moyennes sans itération (comme ça, tu pourras ajouter les itérations une fois qu'elles marcheront). l'idée est:
C'est assez simple, c'est complet (chaque étoile appartient à au moins une constellation), et chaque étoile n'est liée qu'à une seule constellation.
Pour aller plus loin: les k-moyennes consistent "simplement" à ajouter deux étapes à l'algorithme précédent (une fois chaque étoile liée à un point représentant une constellation):
Sinon, si on ne considère pas la 3D (j'ai moi non plus pas lu le code, mais au survol, beaucoup de lignes sont copiées-collées: classes, fonctions et commentaires le simplifieront énormément), oublie tout algorithme intuitif du type "prendre les 3 points les plus proches de chaque étoile" (la taille des constellations va exploser).
Je ne sais pas si "tes cours de maths étant loin", tu sauras construire ton algo à partir d'une courte présentation des algorithmes de partitionnements (les k-moyennes sont probablement les plus aisées à implémenter).
Une idée simple serait alors de faire les k-moyennes sans itération (comme ça, tu pourras ajouter les itérations une fois qu'elles marcheront). l'idée est:
- Placer, au hasard, des points (x,y) dans l'image (aka, dans le carré contenant les étoiles); chaque point représentera une constellation
- Pour chaque point, créer un tableau vide qui contiendra les identifiants des étoiles de la constellation
- Pour chaque étoile, chercher le point le plus proche (calculer les distances entre l'étoile et chaque point, les stocker dans un tableau, et piocher la distance minimale)
- Ajouter l'étoile à la constellation que représente ce point
C'est assez simple, c'est complet (chaque étoile appartient à au moins une constellation), et chaque étoile n'est liée qu'à une seule constellation.
Pour aller plus loin: les k-moyennes consistent "simplement" à ajouter deux étapes à l'algorithme précédent (une fois chaque étoile liée à un point représentant une constellation):
- Pour chaque constellation: déplacer le point qui lui correspond au centre de la constellation (on fait une moyenne, pondérée ou non, des coordonnées des étoiles de la constellation; la pondération peut être sympa si les étoiles ont des masses/tailles différentes)
- Recommencer l'algorithme à l'étape 2 (vider le tableau des constellation, puis le repeupler), en utilisant la nouvelle position des points calculées précédemment