2016-04-14 52 views
0
  • 比方说,我有一个宽100的矩形和高度50
  • 在设定时间的过程中,会出现在矩形中移动一个点,可以说每毫秒。
  • 在每毫秒之间,点位置可能不会改变,稍微改变或改变很大。
  • 现在让我说我想放大原始矩形的2倍,所以矩形的50乘25是可见的(原始大小的1/4)。
  • 我想在放大时始终保持该点可见,所以50乘25的矩形将四处移动以保持点可见。
  • 我的问题涉及保持光标始终在小矩形内可见。
  • 一个幼稚的实现将使小矩形的中心成为每毫秒点的位置,以便它始终可见。但是,这不会在视觉上最佳,因为例如,如果点向右移动一个像素,则应该不需要移动,因为光标仍然可见。
  • 我想知道是否有任何算法/资源可以在每毫秒中找出小矩形的理想中心,以最大限度地减少不必要的移动并使其尽可能平滑。此外,每毫秒的点的所有位置都将事先提供。任何建议/反馈表示赞赏。
+0

一个简单的,首先要尝试的可能是移动平均线。平均最后N个观察到的位置(即计算移动平均线)并将矩形居中。 –

回答

0

每次放大时,都会将矩形分成四部分。检查你的光标在哪个矩形中,只看那个矩形。如果光标改变矩形,移动到那个。假设你知道光标的位置,并且在mod和div的帮助下,你可以找到你需要看到的小矩形。

+0

该方法的问题在于运动根本不会平滑。另外,例如,如果有两个相邻点,但每个点位于不同的象限上,则它们之间的切换将会发生剧烈变化。 –

+0

你认为平滑度是什么?您可以获得尽可能大的移动,并将光标移动到光标的一小部分。 – kameranis

+0

像平滑一样,想象一下,如果小矩形在大矩形的顶部移动,只需少量移动即可,但足​​够使其看起来不像跳跃。我希望它看起来更像是一个平移。你能解释第二部分吗? –

0

我会去它像这样:

  • 检查点仍然是可见的,这意味着当前视图
  • 如果是,你就大功告成了里面。
  • 如果不是,则要尽可能少地移动视口,这意味着要计算视口最靠近的一侧与点之间的距离。

要做到这一点,您需要视口的四个顶点的坐标和点的坐标。由于您有两个坐标,因此可以将视口的边视为直线方程,并应用this来确定哪一个最接近。

当你知道哪一边要“移动”后,例如,你可以将点看作是“移动”一边的中间点,并围绕该点重建视口(也许会给它一些边缘以确保它可见)。