java - 处理 - 如何绘制 x/y 轴大于窗口宽度/高度的散点图

标签 java graph processing scatter

所以我有代码女巫生成 recaman 序列中的数字列表并绘制它们(使用 translate(0,height); scale(1,-1); 将 0,0 放在左下角))。

我的问题是它只显示了我想要绘制的图表的一小部分。例如,我希望能够在 y 轴和 x 轴以及点上使用这些数字,但保持 500,500 窗口大小。

我想绘制一个大于窗口大小 500,500 的图表。

如果可能的话,我该怎么做?

最佳答案

  1. 创建一个大小为 (10000, 10000) 的 PGraphics 对象。

  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

关于java - 处理 - 如何绘制 x/y 轴大于窗口宽度/高度的散点图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52238804/

相关文章:

java - 2个文件中的词频统计

java - FilterRegistrationBean 需要使用 Spring Security 启用 CORS 支持吗?

javascript - 如何在 HighchartJS 中禁用近似?

java - 在处理中的类中使用 controlp5 小部件

java - 为什么你必须为 Windows 和 Linux 编写单独的程序

java - 如何设置文本格式?

graph - DHT(kademlia)是否能够可靠地存储值(value)链?

linux - 我可以用什么在 Linux 上创建修订 TreeMap 形

java - 加工。粒子系统-如何让粒子一颗一颗进来

c++ - 是否有任何程序/方式来模拟 arduino 串行端口并监视正在发送的内容