如果我有一个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
}
答案 0 :(得分:3)
使用 DDA 或 Bresenham ,......
你看起来像 DDA ,但你没有正确处理斜坡。您应该用更大的像素数除以轴,并将其用作控制轴,这样:
如果|dx|>|dy|
,那么for
会经过x = x0 -> x1
和y=y0+((x-x0)*dy/dx)
如果|dx|<|dy|
然后for
经过y = y0 -> y1
和x=x0+((y-y0)*dx/dy)
如果他们是平等的,那么使用上述任何一种。
如果dx==0
和dy==0
只绘制了点,则不存在for
如果主轴上升或下降(可以是x++,y++
或x--,y--
),也不要忘记处理也可以在整数上完成而不进行除法或乘法,但这是另一个故事