簡體   English   中英

在控制台上的兩點之間畫線

[英]Draw line between two points on console

如果我有一個二維字符數組,如何在控制台上畫一條線。 我想寫的函數是這樣的:

這是我的第一次嘗試,但它看起來完全錯誤

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  
}

使用DDABresenham ,...

你所擁有的看起來像DDA ,但你沒有正確處理斜坡。 您應該除以具有更多像素的軸並將其用作控制軸,因此:


如果|dx|>|dy| 然后for通過x = x0 -> x1y=y0+((x-x0)*dy/dx)
如果|dx|<|dy| 然后for通過y = y0 -> y1x=x0+((y-y0)*dx/dy)
如果它們相等,則使用上述任何一種。
如果dx==0dy==0僅繪制點並且不存在for

不要忘記處理主軸是升序還是降序(可以是x++,y++x--,y-- )也可以僅在整數上完成而無需除法或乘法,但這是另一回事

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM