3

如果我有一个二维字符数组,如何在控制台上画一条线。我想写的函数是这样的:

这是我的第一次尝试,但它看起来完全错误

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  
}
4

1 回答 1

2

使用DDABresenham,...

你所拥有的看起来像DDA,但你没有正确处理斜坡。您应该除以具有更多像素的轴并将其用作控制轴,因此:


如果|dx|>|dy|然后for通过x = x0 -> x1y=y0+((x-x0)*dy/dx)
如果|dx|<|dy|然后for通过y = y0 -> y1并且 x=x0+((y-y0)*dx/dy)
如果它们相等,则使用上述任何一种。
if dx==0and dy==0draw just dot and no foris present

不要忘记处理主轴是升序还是降序(可以是x++,y++x--,y--)也可以仅在整数上完成而无需除法或乘法,但那是另一回事

于 2013-11-13T09:46:16.523 回答