如果我有2D字符数组,如何在控制台上画一条线.我要编写的函数如下所示:
这是我的第一次尝试,但看起来完全错误
public static void line(char[][] mPixels, int startRow, int startColumn, int endRow, int endColumn)
{
double dY = endRow - startRow;
double dX = endColumn - startColumn;
double slope = dX / dY;
slope = Math.abs(slope);
if(slope >= 1)
{
double progress = -(dY / dX);
for(int i=startColumn; i<=endColumn; i++)
{
double j = startRow - (int) ((i-startColumn) * progress);
int yLoc = (int) (Math.round( j * 100.0 ) / 100.0);
mPixels[i][yLoc] = '*';
}
}
// print array
}
解决方法:
使用DDA或Bresenham,…
您所看到的看起来像DDA,但不能正确处理坡度.您应该用像素数量较大的轴进行划分并将其用作控制轴,这样:
如果| dx |> | dy |然后通过x = x0-> x1和y = y0((x-x0)* dy / dx)
如果| dx |< | dy |然后通过y = y0-> y1和x = x0((y-y0)* dx / dy)
如果它们相等,则使用以上任何一项.
如果dx == 0且dy == 0则仅画点且不存在for
别忘了处理主轴是上升还是下降(可以是x,y或x-,y–),也可以仅对整数进行除法或乘法运算,但这是另一回事