我正在绘制一个带有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);
}
当我缩放例子时,重新计算原点,因此图形从原始位置移动。 谢谢你的帮助。
答案 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)
,因此您必须定义此原点应位于屏幕空间中的附加点。