3

文字の 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  
}
4

1 に答える 1

2

DDAまたはブレゼンハムを使用してください...

あなたが持っているものはDDAのように見えますが、勾配を正しく処理していません. ピクセル数が多い軸で分割し、それを制御軸として使用する必要があります。


if |dx|>|dy|thenforが通過しx = x0 -> x1y=y0+((x-x0)*dy/dx)
if |dx|<|dy|thenforが通過y = y0 -> y1x=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 に答える