java-在控制台上的两点之间画线

如果我有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–),也可以仅对整数进行除法或乘法运算,但这是另一回事

上一篇:Bresenham直线算法


下一篇:Bresenham算法画圆