2016-04-14 85 views
0
  • 比方說,我有一個寬100的矩形和高度50
  • 在設定時間的過程中,會出現在矩形中移動一個點,可以說每毫秒。
  • 在每毫秒之間,點位置可能不會改變,稍微改變或改變很大。
  • 現在讓我說我想放大原始矩形的2倍,所以矩形的50乘25是可見的(原始大小的1/4)。
  • 我想在放大時始終保持該點可見,所以50乘25的矩形將四處移動以保持點可見。
  • 我的問題涉及保持光標始終在小矩形內可見。
  • 一個幼稚的實現將使小矩形的中心成爲每毫秒點的位置,以便它始終可見。但是,這不會在視覺上最佳,因爲例如,如果點向右移動一個像素,則應該不需要移動,因爲光標仍然可見。
  • 我想知道是否有任何算法/資源可以在每毫秒中找出小矩形的理想中心,以最大限度地減少不必要的移動並使其儘可能平滑。此外,每毫秒的點的所有位置都將事先提供。任何建議/反饋表示讚賞。
+0

一個簡單的,首先要嘗試的可能是移動平均線。平均最後N個觀察到的位置(即計算移動平均線)並將矩形居中。 –

回答

0

每次放大時,都會將矩形分成四部分。檢查你的光標在哪個矩形中,只看那個矩形。如果光標改變矩形,移動到那個。假設你知道光標的位置,並且在mod和div的幫助下,你可以找到你需要看到的小矩形。

+0

該方法的問題在於運動根本不會平滑。另外,例如,如果有兩個相鄰點,但每個點位於不同的象限上,則它們之間的切換將會發生劇烈變化。 –

+0

你認爲平滑度是什麼?您可以獲得儘可能大的移動,並將光標移動到光標的一小部分。 – kameranis

+0

像平滑一樣,想象一下,如果小矩形在大矩形的頂部移動,只需少量移動即可,但足​​夠使其看起來不像跳躍。我希望它看起來更像是一個平移。你能解釋第二部分嗎? –

0

我會去它像這樣:

  • 檢查點仍然是可見的,這意味着當前視圖
  • 如果是,你就大功告成了裏面。
  • 如果不是,則要儘可能少地移動視口,這意味着要計算視口最靠近的一側與點之間的距離。

要做到這一點,您需要視口的四個頂點的座標和點的座標。由於您有兩個座標,因此可以將視口的邊視爲直線方程,並應用this來確定哪一個最接近。

當你知道哪一邊要「移動」後,例如,你可以將點看作是「移動」一邊的中間點,並圍繞該點重建視口(也許會給它一些邊緣以確保它可見)。