我试图从评估的数学函数做一个图表,这是我认为我需要做的。我的图表的极限坐标为-250:-250,向上为250:250。我有Y-limit函数,定义为-10:10,但它可以是用户重新定义的,如果重新定义,我需要计算新的坐标。
我现在有了200个值的y坐标字段,每个值乘以:
ratioY = 25 / (fabs( up-limit - down-limit ) / 20)
这将使坐标适应新的Y限制(如果限制为-5:5,图形看起来大2倍),这效果很好,但现在不是图形确切的位置(见图片)。简单地将25乘以postscript坐标,(up-limit - down-limit) / 20
是“缩放”Y坐标的比率。这很好。
现在我试图“移动坐标”,它将从重新评估的值中减去:
ycoor = (ycoor * ratioY) - move-coorY ;
。
现在我有这样的事情: move-coorY = 25 *((上限 - 下限)/ 2); 它无法正常工作。我需要犯罪(0)从0开始。
这是一个正确的图表,即-10:10
correct one -10:10 http://forum.matematika.cz/upload3/img/2014-01/59348_Screenshot_1.png
这是一个错误的图表,为-5:10
moved one -5:10 http://forum.matematika.cz/upload3/img/2014-01/59372_Screenshot_2.png
答案 0 :(得分:2)
使用固定数字(例如ratioY
)但使用两个不同的坐标系可能更容易不这样做。 物理坐标位于您的问题域中,即它们是您的正弦曲线的实际值。 逻辑坐标是指设备,在您的情况下它们是Postscript中的点值,但它们可能是HTML画布上的像素或其他任何内容。
我用小x
表示第一轴的物理坐标,用大写X
表示相应的逻辑坐标。在每个坐标系中我们都有:
Lower bound: x_min, X_max
Upper bound: x_max, X_max
Range: dx = x_max - x_min
dX = X_max - X_min
然后你可以从物理坐标计算你的逻辑坐标:
X(x) = X_min + (x - x_min) * dX / dx
这反过来也是如此,这对于Postscript文件来说不是问题,但是对于虚拟画布来说,max最有用,其中鼠标点击应该产生物理坐标。
x(X) = x_min + (X - X_min) * dx / dX
在您的情况下,比率或比例因子为dX / dx
,您可以为每个轴计算一次。让我们在第一张图中用y == 0
绘制第一个点:
y_min = -10
y_max = 10
dy = 20
Y_min = -250
Y_max = 250
dX = 500
Y(0) = -250 + (0 - (-10)) * 500 / 20
= -250 + 10 * 500 / 20
= 0
在第二张图中,逻辑坐标相同,但是:
y_min = -5
y_max = 10
dy = 15
Y(0) = -250 + (0 - (-5)) * 500 / 15
= -250 + 5 * 500 / 15
= -83.3333
如果您更改图表的范围,例如从(-10,10)到(-5,10),只需调整物理坐标即可。如果调整图形大小,请更改逻辑坐标。 (另外,计算图中的点与计算轴的刻度线的位置相同。奇怪的是,你得到了刻度线,但不是你的图。我认为你的问题是要考虑到非零值图形和曲线数据的下限。)
此外,在打印时重新评估逻辑坐标可能更好,而不是从之前的图中转换它们。您可以动态执行此操作,这样您只需将物理数据保存在数组中即可。
(最后,我承认我并不完全确定这两种穹顶被称为物理和逻辑。我知道这些使用的是术语,但它可能是相反的,或者它们甚至可能意味着完全不同。)
答案 1 :(得分:0)
我的朋友为我做了一个好的yob并编程了这个......
double zeroPosition(double startY, double endY){
double range = endY - startY;
double topSize = endY / range;
return 250.0 - 500 * topSize;
}
这将计算零的位置,我只是按比例添加到我的Y位置,它正是我需要的工作方式!
但是,谢谢M Oehm;)