График с исправлением происхождения - PullRequest
1 голос
/ 01 апреля 2011

Я рисую график со свингом, и я хотел бы установить фиксированное начало координат, то есть когда я масштабировал график, обновляются только горизонтальные и вертикальные метки от оси. Вот что у меня есть до сих пор:

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 Ответ

1 голос
/ 02 апреля 2011

Предположим, ваше происхождение находится в точке (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), и поэтому вы должны определить эту дополнительную точку, где ваше происхождение должно быть в пространстве экрана.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...