【问题标题】:Java Coordinate SystemJava坐标系
【发布时间】:2014-05-12 13:21:22
【问题描述】:

我正在研究 Java 中的 Bresenham 线绘制算法,我已经能够绘制线,但我遇到了坐标问题。我的行从屏幕的左上角开始,我希望它从左下角开始。我试过仿射变换但失败了。这是我的代码示例。

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);
            }
        }
    }
}

感谢您的帮助!!

【问题讨论】:

  • 所以不是自上而下(如 \),您需要将行自下而上(如 /)?
  • 嗨,Hirak,没错。我希望这条线自下而上/
  • 您不仅需要使用 0,Height 作为起始坐标,还需要调整 bresenham 实现以“减去”后续坐标而不是相加以实现底部 -向上。只需将 0,0 更改为 0,height 就会从屏幕中间开始一条自上而下的线。
  • 这个example 使用AffineTransform

标签: java swing bresenham


【解决方案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;      
        // ... 
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 2014-10-20
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多