Je travaille sur ce jeu de grille iso (plus précis: projection dimétrique, indexé en losange typique) et je voulais mettre en place des pinceaux circulaires pour peindre des carreaux sur ma carte juste comme vous le feriez dans n'importe quel logiciel d'édition d'image. J'ai commencé avec le Midpoint Circle Algorithm, mais remarqué tout de suite, que le résultat ne ressemble pas à ce que je veux pour les petites tailles de pinceau entre 1 et 7.Meilleur algorithme que Midpoint Circle pour les mappes de tuiles sur la grille iso
j'aurais bien plutôt quelque chose comme ceci:
Ignore, que les premiers cercles ne sont pas remplis, que bien sûr est facile. Existe-t-il des algorithmes adaptés pour la génération de formes sur les grilles iso? Je ne veux probablement même pas de formes en cercle, mais en alternant des formes en quad et en croix/x.
Voici le code pour le premier échantillon d'image tirée de Wikipedia:
static List<IntVector2> GetBrushCircleCoords(int x0, int y0, int radius)
{
List<IntVector2> coords = new List<IntVector2>();
int x = radius;
int y = 0;
int err = 0;
while (x >= y)
{
coords.Add(new IntVector2(x0 + x, y0 + y));
coords.Add(new IntVector2(x0 + y, y0 + x));
coords.Add(new IntVector2(x0 - y, y0 + x));
coords.Add(new IntVector2(x0 - x, y0 + y));
coords.Add(new IntVector2(x0 - x, y0 - y));
coords.Add(new IntVector2(x0 - y, y0 - x));
coords.Add(new IntVector2(x0 + y, y0 - x));
coords.Add(new IntVector2(x0 + x, y0 - y));
y += 1;
err += 1 + 2 * y;
if (2 * (err - x) + 1 > 0)
{
x -= 1;
err += 1 - 2 * x;
}
}
return coords;
}
Je ne sais pas comment améliorer le code pour les petits cercles. Mais comme vous l'avez mentionné, vous ne voulez peut-être pas (juste) des cercles de toute façon, je pense que ce [post sur 'pixels virtuels'] (http://stackoverflow.com/questions/22881312/c-sharp-drawing-text-using-custom -pixels/22881391 # 22881391) peut être d'intérêt. Il explique comment vous pouvez utiliser le dessin normal (GDI + ou autre) pour créer un modèle à partir duquel vous choisissez les pixels de la brosse. De cette façon, vous pouvez utiliser toutes les primitives graphiques, y compris les polices. – TaW
Ajout de ** [Edit1] ** à ma réponse. – Spektre