int rowNumber = 200, colNumber = 200;
int[,] a = new int[rowNumber, colNumber];
double cellsize = 1;
int lineID = 1, col, j, row;
double x1 = XX, y1 =XX ;
double x2 = XX, y2 = XX;
double k = (y2 - y1) / (x2 - x1), b = y1 - x1 * k;
int col1 = (int)(x1 / cellsize), col2 = (int)(x2 / cellsize);
int row1 = (int)(y1 / cellsize), row2 = (int)(y2 / cellsize); if (k > 1 || k < -1)
{
if (col1 < col2)
for (col = col1; col < col2; col++)
{
double y0 = col * k + b;
double x = col + 1;
double y = x * k + b;
for (double d = Math.Floor(y0); d < y; d += 1)
{
int yz = (int)(d);
a[yz, col] = lineID;
Console.WriteLine("a[{0},{1}]={2}", yz, col, a[yz, col]);
}
}
else
{
for (col = col1; col > col2; col--)
{
double y0 = col * k + b;
double x = col - 1;
double y = x * k + b;
for (double d = Math.Floor(y0); d > y; d -= 1)
{
int yz = (int)(d);
a[yz, col] = lineID;
Console.WriteLine("a[{0},{1}]={2}", yz, col, a[yz, col]);
}
}
} }
else
{
if (row1 < row2)
{
for (row = row1; row < row2; row++)
{
double x0 = (row - b) / k;
double y = row + 1;
double x = (y - b) / k;
for (double d = Math.Floor(x0); d < x; d += 1)
{
int xz = (int)(d);
a[row, xz] = lineID;
Console.WriteLine("a[{0},{1}]={2}", row, xz, a[row, xz]);
}
}
}
else
{
for (row = row1; row > row2; row--)
{
double x0 = (row - b) / k;
double y = row - 1;
double x = (y - b) / k;
for (double d = Math.Floor(x0); d > x; d -= 1)
{
int xz = (int)(d);
a[row, xz] = lineID;
Console.WriteLine("a[{0},{1}]={2}", row, xz, a[row, xz]);
}
}
}
} }
程序是想计算由(X1,Y1)到(X2,Y2)连成的线段经过了哪些格子。。然后给这些格子赋值lineID。。但是程序里面if(col1>col2)和if(row1>row2)部分好像有问题,每当执行这个部分返回的结果都不对。希望高手指点一下。。脑袋都被绕晕了谢谢
int[,] a = new int[rowNumber, colNumber];
double cellsize = 1;
int lineID = 1, col, j, row;
double x1 = XX, y1 =XX ;
double x2 = XX, y2 = XX;
double k = (y2 - y1) / (x2 - x1), b = y1 - x1 * k;
int col1 = (int)(x1 / cellsize), col2 = (int)(x2 / cellsize);
int row1 = (int)(y1 / cellsize), row2 = (int)(y2 / cellsize); if (k > 1 || k < -1)
{
if (col1 < col2)
for (col = col1; col < col2; col++)
{
double y0 = col * k + b;
double x = col + 1;
double y = x * k + b;
for (double d = Math.Floor(y0); d < y; d += 1)
{
int yz = (int)(d);
a[yz, col] = lineID;
Console.WriteLine("a[{0},{1}]={2}", yz, col, a[yz, col]);
}
}
else
{
for (col = col1; col > col2; col--)
{
double y0 = col * k + b;
double x = col - 1;
double y = x * k + b;
for (double d = Math.Floor(y0); d > y; d -= 1)
{
int yz = (int)(d);
a[yz, col] = lineID;
Console.WriteLine("a[{0},{1}]={2}", yz, col, a[yz, col]);
}
}
} }
else
{
if (row1 < row2)
{
for (row = row1; row < row2; row++)
{
double x0 = (row - b) / k;
double y = row + 1;
double x = (y - b) / k;
for (double d = Math.Floor(x0); d < x; d += 1)
{
int xz = (int)(d);
a[row, xz] = lineID;
Console.WriteLine("a[{0},{1}]={2}", row, xz, a[row, xz]);
}
}
}
else
{
for (row = row1; row > row2; row--)
{
double x0 = (row - b) / k;
double y = row - 1;
double x = (y - b) / k;
for (double d = Math.Floor(x0); d > x; d -= 1)
{
int xz = (int)(d);
a[row, xz] = lineID;
Console.WriteLine("a[{0},{1}]={2}", row, xz, a[row, xz]);
}
}
}
} }
程序是想计算由(X1,Y1)到(X2,Y2)连成的线段经过了哪些格子。。然后给这些格子赋值lineID。。但是程序里面if(col1>col2)和if(row1>row2)部分好像有问题,每当执行这个部分返回的结果都不对。希望高手指点一下。。脑袋都被绕晕了谢谢
int row1 = (int)(y1 / cellsize), row2 = (int)(y2 / cellsize);
根本就不应该向下取整,应该向上取整
另外垂直的竖线也没考虑