所以我试图创建一个小图,我将允许用户添加随机线等作为学习项目。最令人沮丧的部分是弄清楚如何让放大/缩小工作 - 我将ZoomScale变量绑定到鼠标滚轮,并且它“起作用”,但我希望能够标记轴,具体取决于它们的大小放大并计算它的距离测量(米,厘米等,因为我也有一个MM每像素变量,所以我们应该能够计算出来),所以它需要更精确的科学,而不仅仅是“它的工作”放大和缩小计算
double X1 = ((actualline[i].X1 + actualWidth - VisibleXMax - VisibleXMin) * ZoomScale); //Calculate modified coordinates based on
double X2 = ((actualline[i].X2 + actualWidth - VisibleXMax - VisibleXMin) * ZoomScale); // window width, window height, Visible X/Y, and Zoom.
double Y1 = ((actualline[i].Y1 + actualHeight - VisibleYMax - VisibleYMin) * ZoomScale);
double Y2 = ((actualline[i].Y2 + actualHeight - VisibleYMax - VisibleYMin) * ZoomScale);
而不是努力工作,让我们尝试一个简单的1维方程,我可以重写为x和y。
因此,可以说,我们在x方向
. . . . .
目前,填补了我们的整个屏幕(以及窗口实际上)5个单位宽线。从0到5一路穿过。现在用户滚动来放大前三个单位。现在这3个单位应该填满整个窗口,因为用户放大了它。它应该像这样在窗口
. . .
所以originially线为X1 = 0,X2 = 5.0至5。由于我们的窗口是5个单位宽它填补了窗口。现在,用户只想看到单位x1 = 0到x2 = 3. 0到3.但是我们希望这些单位在整个窗口中伸展,所以通过某种缩放计算(如上所述),我们想要将0,3变为0,5使用可用的变量。变量是:
窗口宽度(5个单位在这种情况下)
原始X1和X2(0和5在这种情况下)
可见X min和max(0和3在这种情况下)
并且每次向上滚动时缩放比例为1并且增量为0.05。
有什么建议吗?
@FirstStep OK的声音好!不急! – Fivestar