обработка - как построить график рассеяния с осью X / Y, превышающей ширину / высоту окна - PullRequest
0 голосов
/ 08 сентября 2018

Итак, у меня есть код, который генерирует список чисел в последовательности recaman и строит их графики (с 0,0 слева внизу, используя translate(0,height); scale(1,-1);).

Моя проблема в том, что он показывает только небольшую часть графика, который я хочу построить. Например, я хочу иметь возможность иметь 10 000 на оси Y и X, а также точки , используя эти числа, но сохраняя размер окна 500 500.

Я хочу построить график больше 500 500, размер окна.

как мне это сделать, если это возможно?

1 Ответ

0 голосов
/ 09 сентября 2018
  1. Создание PGraphics объекта размером (10000, 10000).

  2. Отображение ваших очков в это (вы можете вызывать каждый метод рисования Обработка для PGraphics объекта).

  3. Нарисуйте объект PGraphics в разных местах окна для имитации панорамирования на графике.

В следующем примере показано, как это можно сделать, с помощью функции панорамирования мыши и статического графика (создается и заполняется в setup () ).

import processing.core.PApplet;
import processing.core.PGraphics;

public class Prototype extends PApplet {

public static void main(String[] args) {
    PApplet.main(Prototype.class);
}

int xOffset = 0, yOffset = 0;
int xOffsetP, yOffsetP;
int mouseDownX, mouseDownY;
boolean move = false;
PGraphics graph;

@Override
public void settings() {
    size(500, 500);
}

@Override
public void setup() {

    graph = createGraphics(2000, 2000); // Create graph 2000x2000px
    graph.beginDraw();

    graph.background(255);
    graph.fill(0);
    for (int i = 0; i < 1000; i++) { // Adds 1000 random points to graph
        graph.ellipse(random(2000), random(2000), 3, 3);
    }

    for (int i = 0; i < graph.height; i += 50) { // Adds Y-axis labels
        graph.text(i, 5, graph.height - i);
    }

    graph.line(0, 0, 1999, 0); // Graph edge/border
    graph.line(0, 1999, 1999, 1999);
    graph.line(0, 0, 0, 1999);
    graph.line(1999, 0, 1999, 2000);

    graph.endDraw();
}

@Override
public void draw() {
    background(255);

    if (move) {
        xOffset = mouseDownX - mouseX + xOffsetP;
        yOffset = mouseY - mouseDownY + yOffsetP;

        xOffset = constrain(xOffset, 0, graph.width - width); // Optional
        yOffset = constrain(yOffset, 0, graph.height - height); // Optional
    }

    image(graph, -xOffset, yOffset - graph.height + height);

    fill(255, 0, 0);
    text("X Offset: " + xOffset, 0, 10);
    text("Y Offset: " + yOffset, 0, 25);
}

@Override
public void mousePressed() {
    move = true;
    mouseDownX = mouseX;
    mouseDownY = mouseY;
}

@Override
public void mouseReleased() {
    move = false;
    xOffsetP = xOffset;
    yOffsetP = yOffset;
}

}

Результат (в окне 500x500):

Demo

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