使用一维数组绘制一条线

Drawing a line using a 1D array

我目前在使用 monogame 时遇到问题,我试图通过在数据数组本身内设置值来绘制一条线,而不是使用 mono draw api。

我使用的是 Bresenhams line 算法的修改版本,如果我使用 spritebatch 绘图,它似乎可以工作,但是我希望使用数组来设置像素颜色。

我遇到的问题是找到相关坐标,因为我的单游戏数组是 1 维(宽*高):

        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;
            }
        }

是否有一种简单的方法可以找到与我的像素包含在一维数组中的 point1.x 和 point1.y 位置相关的像素。

I.E 如果我有 (5*5) 或 (width*height) 大小的数组 (25),在循环时我如何知道当前循环计数器是否代表一维数组中适当的 x、y 位置?

我已经尝试将其转换为 ,但是我宁愿避免在 1D 和 2D 数组之间进行不必要的循环转换。

你可以用

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