具有修复原点的图表

时间:2011-03-31 21:25:10

标签: java swing graph

我正在绘制一个带有swing的图形,我想设置一个固定的原点,也就是当我缩放图形时,只更新轴上的水平和垂直标签。 以下是我现在所拥有的:

protected void drawAxis(Graphics2D g2) {
    double axisH = yPositionToPixel(originY);
    double axisV = xPositionToPixel(originX);

    g2.drawLine(0, (int) axisH, getWidth(), (int) axisH);
    g2.drawLine((int) axisV, 0, (int) axisV, getHeight());
}

protected double yPositionToPixel(double position) {
    double height = (double) getHeight();
    return height - ((position) * (height) / (maxY));
}

protected double xPositionToPixel(double position) {
    return (position) * (double) getWidth() / (maxX);
}

当我缩放例子时,重新计算原点,因此图形从原始位置移动。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

假设您的原点位于图表空间中的(originX,originY)点,但屏幕空间中位于(pixelOriginY,pixelOriginX)。然后适用以下转换:

protected double yPositionToPixel(double position) {
    double height = (double) getHeight();
    return pixelOriginY - (position-originY) / (maxY-originY) * (height-pixelOriginY);
}

protected double xPositionToPixel(double position) {
    double width = (double) getWidth();
    return pixelOriginX + (position-originX) / (maxX-originX) * (width-pixelOriginX);
}

如果您在屏幕上将原点设置为(0,0)(0,height),您将获得等式。因此,我假设您的原点不在(0,0),因此您必须定义此原点应位于屏幕空间中的附加点。