График и функция масштабирования - PullRequest
1 голос
/ 07 апреля 2011

Я хотел бы добавить функцию увеличения в мой график. Например, если maxY моего графика равен 5000, и я увеличиваю расстояние на 200 метров вокруг центра, моя ось должна представлять значения от 2400 до 2600, центр - 2500.

private class ZoomHandler implements MouseWheelListener {

    public void mouseWheelMoved(MouseWheelEvent e) {
        double distanceY = maxY;

        double cursorY = maxY / 2.0;

        int rotation = e.getWheelRotation();
        if (rotation < 0) {
            distanceY = 200 / 2;
        } else {
            distanceY = 200 * 2;
        }
        maxY = cursorY + distanceY;

        repaint();
    }
}

Может кто-нибудь помочь с математической операцией? Спасибо.

График нарисован так:

private void drawAxis(Graphics2D g2) {
    FontMetrics metrics = g2.getFontMetrics();
    double axisH = yPositionToPixel(originY);
    double axisV = xPositionToPixel(originX);

    g2.drawLine(0 + V_BORDER, (int) axisH, getWidth(), (int) axisH);

    g2.drawLine((int) axisV, (int) axisH, (int) axisV, getHeight() - H_BORDER);
}

protected double yPositionToPixel(double position) {
    double height = (double) getHeight();

    return pixelOriginY + (position) / (maxY) * (height - (pixelOriginY + H_BORDER));
}

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

private void drawHorizontalLabels(Graphics2D g2) {
    double axisV = xPositionToPixel(originX);
    FontMetrics metrics = g2.getFontMetrics();
    for (double y = originY + majorY; y < maxY + majorY; y += majorY) {
        int position = (int) yPositionToPixel(y);
        if (rightToLeft) {
            g2.drawString(formatter.format(y), (int) axisV + 5, position);
    }}

Конструктор выглядит так:

public Graph(double originX, double originY, double pixelOriginX, double pixelOriginY,
        double minX, double maxX,
        double minY, double maxY,
        double majorX, double majorY, String labelXaxis, String labelYaxis) {}

И вот как я его инициализирую:

new GraphDisplay(0.0, 0.0, 40, 100, -0.1, 120, -0.1, 5000, 20, 1000);

GraphDisplay расширяет Graph.

1 Ответ

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

JFreeChart уже встроен.

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