04-07-2014, 02:01 PM
(04-07-2014, 11:33 AM)Xenos a écrit : 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:
- 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
Effectivement je me base sur un contexte 2D (la représentation 3D alourdira le jeu inutilement)
Les constellations ne sont qu’une manière de regrouper des systèmes proche et donnerons des avantages aux alliances et factions qui les contrôles.
Mes cours de math sont très très très loin mais je vais regarder ce que tu m’as envoyé…
Merci