在图表上放置正确的缩放标记

时间:2013-06-17 22:46:05

标签: java graph processing

我在Processing(Java)中有一个简单的图形。它将0到1024之间的值显示为具有不同高度的绿线 看看:enter image description here

我想在图表上添加标记以增加方向。这意味着想要一个灰色的水平线标记,例如0,256,512,768和1024.我想根据窗口大小显示不同的标记数量。这应该通过两个标记之间的最小100px距离来决定 我无法弄清楚如何从高处计算出来。这是我第二次遇到这个问题,而且我从未明确和成功地解决过这个问题 这是我的尝试:

  //How many marks can we display at maximum
  byte no_marks = (byte)(height/100);  
  //I just guess I always want 1,3,5... here, so there will be a mark in the middle
  if(no_marks%2==0)
    no_marks--;
  //Calculate how many pixels will be between my marks
  short mark_distance = (short)(height/no_marks);
  //Now calculate the value distance between marks
  short mark_step = (short)(1024/(no_marks+1));

  textSize(32);
  //I go from 1 to max-1 because 0 and 1024 wouldn't fit on screen
  for(byte i=1; (i+1)<no_marks; i+=1) {
     //Draw light blue text
     text((i*mark_step), 5,mark_distance*i); 
     fill(0, 102, 153);
  }

1 个答案:

答案 0 :(得分:1)

你的帆布有多大?

我们假设它是1200像素高。 如果从序列输入中获取0-1024的值,则需要将屏幕底部(处理中的height)的值绘制为1024.假设您将其居中,因此将其偏移88像素:

int graphHeight = 1024; int baseLine = height - ((height - graphHeight)/ 2); // 1112

现在是您绘制所有内容的起点。 然后我们假设你按照相同的公式制作灰色标记:

int quarterLine = baseLine - 256; // 856 int halfLine = baseLine - 512; // 600 int threeQuarterLine = baseLine - 768; // 344 int topLine = baseLine - graphHeight; // 88

如果您的画布小于该高度,请相应缩放...

有意义吗?

然后,用line()方法绘制它们:

行程(155); line(0,quarterLine,width,quarterLine);

等...