0

私は Java で Bresenham Line drawing アルゴリズムに取り組んでおり、線を描くことができましたが、座標に問題があります。私の行は画面の左上隅から始まり、左下隅から始めたいです。アフィン変換を試みましたが失敗しました。これが私のコードのサンプルです。

public void paintComponent( Graphics g )
{
    Graphics2D g2d = (Graphics2D) g;
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    g2d.setColor(Color.GREEN);
    g2d.fillRect(0, 0, getWidth(), getHeight());    
    int xElemSize = this.getWidth() / this.screenPixel.getSizeX();
    int yElemSize = this.getHeight() / this.screenPixel.getSizeY();             
    int rectX = 0, rectY = 0;

    for (int i = 0; i < this.screenPixel.getSizeX(); i++)
    {
        for (int h = 0; h < this.screenPixel.getSizeY(); h++)
        {   
            if (screenPixel.matrix[i][h] != 0)
            {
                rectX = i * xElemSize;
                rectY = h * yElemSize;      
                Rectangle2D rect = new Rectangle2D.Double(rectX, rectY, xElemSize, yElemSize);
                g2d.setColor(Color.GREEN);
                g2d.fill(rect);
                g2d.draw (rect);
                bresenham_Linie(x1, y1, x2, y2);
            }
        }
    }
}

助けてくれてありがとう!!

4

1 に答える 1

1

Java2D 座標は、あなたが考えているものとは異なります。Java2D では、左上が (0,0) です。左下は (0, HEIGHT) です。

公式チュートリアルを参照してください: http://docs.oracle.com/javase/tutorial/2d/overview/coordinate.html

for (int h = 0, maxH=this.screenPixel.getSizeY(); h < maxH; h++)
{   
    if (screenPixel.matrix[i][h] != 0)
    {
        rectX = i * xElemSize;
        rectY = (maxH-h) * yElemSize;      
        // ... 
    }
}
于 2014-05-12T13:30:21.673 に答える