使用一维数组绘制一条线
问题描述:
我目前有一个使用monogame的问题,我试图通过在数据数组本身内设置值来绘制一条线,而不是使用单色绘制API。使用一维数组绘制一条线
我使用Bresenhams line算法的修改版本,这似乎工作,如果我使用spritebatch绘制,但我希望使用数组设置像素颜色。
有被发现的有关坐标我monogame阵列的问题IM是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我的像素包含在一维数组中的位置。如果我有(5 * 5)或(宽*高)大小的数组(25),同时循环我如何知道当前循环计数器是否表示1D数组内的适当x,y位置?
我已经尝试将它转换为2D array,但我宁愿避免不必要的1D和2D数组之间转换的循环。
答
您可以
if(i == point.y * width + point.x)
{
//do something
}
'我== Y *宽+ x'什么检查呢?取决于如何构建1D阵列。 –
好吧,试了一下,并做到了。如果您将它作为答案发布,我会接受它。非常感谢! – D3181