0

我在处理(Java)中有一个简单的图表。它将 0 到 1024 之间的值显示为具有不同高度的绿线。
看一看: 在此处输入图像描述

我想在图表上标记以增加方向。这意味着需要一条灰色水平线标记,例如 0、256、512、768 和 1024。我想根据窗口大小显示不同数量的标记。这应该由两个标记之间的最小 100 像素距离决定。
我不知道如何从高度计算这个。这是我第二次面对这个问题,但我从来没有清楚而成功地解决它。
这是我的尝试:

  //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);
  }
4

1 回答 1

1

你的画布有多大?

假设它是 1200 像素高。如果您从串行输入中获取 0-1024 的值,您希望将这些值从屏幕底部(处理中的高度)绘制为 1024。假设您将其居中,因此将其偏移 88 个像素:

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

现在这是您绘制所有内容的起点。然后让我们假设您遵循相同的公式来制作灰色标记:

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

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

有道理 ?

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

中风(155);线(0,季度线,宽度,季度线);

ETC...

于 2013-06-18T17:24:29.873 回答