使用一维数组绘制一条线
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
}
我目前在使用 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 位置?
我已经尝试将其转换为
你可以用
查看if(i == point.y * width + point.x)
{
//do something
}