2017-08-12 3 views
0

Je rencontre actuellement un problème avec monogame lorsque j'essaie de tracer une ligne en définissant des valeurs dans le tableau de données lui-même plutôt que d'utiliser l'API de dessin mono. Im en utilisant une version modifiée de l'algorithme Bresenhams line, qui semble fonctionner si je dessine en utilisant spritebatch, mais je souhaite utiliser un tableau pour définir les couleurs de pixels.Dessin d'une ligne à l'aide d'un tableau 1D

La question est de trouver im ayant les coordonnées pertinentes que mon tableau est monogame 1 dimensions (largeur * hauteur):

 var data = new Microsoft.Xna.Framework.Color[width*height]; 
     //my 1 dimensional array 

     int dx = Math.Abs(point2.x - point1.x); 
     int dy = Math.Abs(point2.y - point1.y); 

     int sx = (point1.x < point2.x) ? 1 : -1; 
     int sy = (point1.y < point2.y) ? 1 : -1; 

     int err = dx - dy; 

     for(int i=1;i<data.Length;++i) 
     { 

      data[i] = color; // me setting the pixel value 


      if (point1.x == point2.x && point1.y == point2.x) 
      { 
       break; 
      } 

      int e2 = 2 * err; 

      if (e2 > -dy) 
      { 
       err = err - dy; 
       point1.x = point1.x + sx; 
      } 

      if (e2 < dx) 
      { 
       err = err + dx; 
       point1.y = point1.y + sy; 
      } 
     } 

est-il un moyen simple de trouver le pixel qui se rapporte à la point1.x et position point1.y où mes pixels sont contenus dans un tableau 1D. I.E si j'ai un tableau (25) de taille (5 * 5) ou (largeur * hauteur), en bouclant comment savoir si le compteur de boucle courant représente la position x, y appropriée dans le tableau 1D?

J'ai essayé de le convertir en 2D array, mais je préfère éviter les boucles inutiles de conversion entre un tableau 1D et 2D.

+1

'i == y * largeur + x' ou quelque chose? Selon comment est construit le tableau 1D. –

+0

ok essayé et ça l'a fait. Si vous l'affichez comme réponse, je l'accepterai. Merci beaucoup! – D3181

Répondre

1

Vous pouvez vérifier avec

if(i == point.y * width + point.x) 
{ 
    //do something 
}