Java 固定原点图

Java 固定原点图,java,swing,graph,Java,Swing,Graph,我正在用swing绘制一个图形,我想设置一个固定的原点,也就是说,当我缩放图形时,只更新轴的水平和垂直标签。 以下是我到目前为止所拥有的: protected void drawAxis(Graphics2D g2) { double axisH = yPositionToPixel(originY); double axisV = xPositionToPixel(originX); g2.drawLine(0, (int) axisH, getWidth(), (i

我正在用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);
}
例如,当我缩放时,原点被重新计算,因此图形正在从其原始位置移动。
谢谢您的帮助。

假设您的原点位于图形空间中的点
(原点,原点)
,但位于屏幕空间中的点
(像素原点,原点)
。然后应用以下转换:

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,高度)
,您将得到您的方程式。因此,我假设您的原点不在
(0,0)
,因此您必须在屏幕空间中定义原点的附加点。

假设您的原点在图形空间中的
(originX,originY)
,但在屏幕空间中定义
(像素原点,像素原点)
。然后应用以下转换:

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,高度)
,您将得到您的方程式。因此,我假设您的原点不在
(0,0)
,因此您必须在屏幕空间中定义原点所在的附加点