我在Processing(Java)中有一个简单的图形。它将0到1024之间的值显示为具有不同高度的绿线 看看:
我想在图表上添加标记以增加方向。这意味着想要一个灰色的水平线标记,例如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);
}
答案 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);
等...