我重新编译了我的绘图应用程序以使用磨损OS,但出现了故障。该应用程序显示网格和波形,但波形构造错误。在磨损中,网格更加粗糙,并且该误差显而易见。我已经显示了原始代码并对其进行了修改下面的顺序。
// scale Y coordinate. Input, elevation in feet.
// Output, y position of elevation in screen coordinate
static float scaleY(double elevation) {
double a, b, c, offsetFromTopFeet, pixelRange, feetRange, pixelsPerFoot,offsetFromTopPixels;
// original coding
a = maxY - elevation; //point in terms of feet within vert scale.
b = (bottom - top) / (maxY - minY);
c = top + (float) (a * b);
// return (float)c;
// new coding
offsetFromTopFeet = maxY - elevation; // a
pixelRange = bottom - top;
feetRange = maxY - minY;
pixelsPerFoot = pixelRange / feetRange; // b
offsetFromTopPixels = top + offsetFromTopFeet * pixelsPerFoot;
return (float) offsetFromTopPixels;
}
即使变量是双精度值,原始编码中b的计算也会返回整数结果。这就是使波形失真的原因。在下面显示的重构代码中,正确计算了pixelPerFoot变量,并正确显示了图形。我已经在Android应用程序中使用此例程很多年了,或者我从未注意到问题,更精细的网格覆盖了它,还是其他?]
我的问题是为什么b计算返回一个整数,而pixelPerFoot返回正确的类型?这是编程错误吗?
我重新编译了我的绘图应用程序以使用磨损OS,但出现了故障。该应用程序显示网格和波形,但波形构造错误。在磨损中,网格更粗糙,并且此...
表达式(bottom - top) / (maxY - minY);
的类型为int,因为两个int的减法是int,并且将int除以int也是int。结果分配给的变量类型无关紧要;使用整数算术执行计算,然后在截断后将其转换为浮点值。
对于这一行代码:
所有组件都是int,您需要强制转换,例如(double)feetRange分母中的范围