减少不必要运动的算法?

时间:2016-04-14 21:03:37

标签: algorithm optimization zooming

  • 假设我有一个宽度为100且高度为50的矩形。
  • 在一段时间内,矩形中会有一个点移动,比如每毫秒。
  • 在每毫秒之间,点位置可能不会发生变化,变化不大,或者变化很大。
  • 现在假设我要在原始矩形上放大2倍,因此一次只能看到50 x 25的矩形(原始尺寸的1/4)。
  • 我希望在放大时始终保持点可见,因此50 x 25的矩形将会四处移动以保持点可见。
  • 我的问题涉及在较小的矩形内始终保持光标可见。
  • 一个简单的实现方法是让较小的矩形的中心成为每毫秒点的位置,这样它就能始终可见。然而,这在视觉上并不是最优的,因为例如,如果该点移动到右边的一个像素,则实际上不需要移动,因为光标仍然可见。
  • 我想知道是否有任何算法/资源可以帮助在每毫秒找出小矩形的理想中心,以尽量减少不必要的移动并使其尽可能平滑。此外,每毫秒点的所有位置都将预先可用。任何建议/反馈都表示赞赏。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我会这样做:

  • 检查点是否仍然可见,这意味着当前视图内部
  • 如果是,那就完成了。
  • 如果不是,您希望尽可能少地移动视口,这意味着计算视口最近侧与该点之间的距离。

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

在您知道“移动”哪一侧之后,您可以将该点作为“移动”侧的中间点并重建围绕该点的视口(可能会给它一些争用以确保它可见)