0
我正在制定一个图表算法,该算法会给我一组我将在图形上使用的y轴值的数组。如何确定图表上的Y轴值
主要的问题是我也想计算使用的步数的数量,并使用它们的好数字。它必须能够采取整数和双打,并能够处理小范围(小于1)和大范围(超过10000等)。例如,如果给出0.1-0.9的范围,理想情况下,我将具有0,0.2,0.4,0.6,0.8,1的值,但是如果给出0.3-0.7,我可以使用0.3,0.4, 0.5,0.6,0.7
这是我迄今为止,它具有很小的范围内运作良好,但可怕的大范围内,并且不会给我好号码
-(double*)yAxisValues:(double)min (double):max {
double diff = max - min;
double divisor = 1.0;
if (diff > 1) {
while (diff > 1) {
diff /= 10;
divisor *= 10;
}
} else {
while (diff < 1) {
diff *= 10;
divisor *= 10;
}
}
double newMin = round(min * divisor)/divisor;
double newMax = round(max * divisor)/divisor;
if (newMin > min) {
newMin -= 1.0/divisor;
}
if (newMax < max) {
newMax += 1.0/divisor;
}
int test2 = round((newMax - newMin) * divisor);
if (test2 >= 7) {
while (test2 % 6 != 0 && test2 % 5 != 0 && test2 % 4 != 0 && test2 % 3 != 0) {
test2++;
newMax += 1.0/divisor;
}
}
if (test2 % 6 == 0) {
test2 = 6;
} else if (test2 % 5 == 0) {
test2 = 5;
} else if (test2 % 4 == 0 || test2 == 2) {
test2 = 4;
} else if (test2 % 3 == 0) {
test2 = 3;
}
double *values = malloc(sizeof(double) * (test2 + 1));
for (int i = 0; i < test2 + 1; i++) {
values[i] = newMin + (newMax - newMin) * i/test2;
}
return values;
}
有什么建议?
问题是,我不知道每个单元有多少像素,因为我希望根据给定的轴线改变轴线。对于某些数据集,每个单元可能有20个像素,但对于其他集合,我需要50或0.002等。 – James 2010-07-05 19:28:41
这与我使用此代码没有任何区别。你知道你正在绘制的数据的范围,以及你的图形的大小。为了使数据适合您的图形,请将大小除以范围以获取可传递给此方法的'pixelsPerUnit'值。 – 2010-07-05 19:47:16
好吧,仔细阅读之后,仔细阅读你的指示并修改它,我已经有效了,谢谢! – James 2010-07-06 15:00:22