2009-10-20 73 views
1

我一直坐着用鉛筆在晚上的更好的一部分試圖回憶如何實現一個可以瀏覽2D區域的可縮放視口。自從我第一次聽說它已經有一段時間了,但我想我已經明白了,我只需要驗證一下。需要有人來驗證我的數學是正確的

我們擁有一個帶有「經典」笛卡爾座標系的2D世界,x軸指向右側,y軸指向頂部。

在世界區域,我們有2點PMIN和P最大,所限定的矩​​形的視口,其中: PMIN(XMIN,YMIN),P最高(XMAX,YMAX)。這些點定義視口的大小,位置和規模

在世界領域,我們有一個點P,其中PMIN < P(X,Y)< P最大。 (P在視口矩形中)

要顯示整個該死的東西,我們有一個畫布(例如),它有一個「改變」的座標系,x軸指向右邊,y軸指向下。畫布的尺寸是MaxX和MaxY。畫布的大小是固定的。現在

,爲了在畫布上顯示點P '(X',Y')我需要計算是這樣的位置:

x' = (x - xmin) * Sx,其中Sx = MaxX/(xmax - xmin)

y' = MaxY - (y - ymin) * Sy,其中Sy = MaxY/(ymax - ymin)

*請注意,Y」座標反轉由於畫布的座標系統

在其他工作ords:上面的數學應該考慮顯示一個點,同時考慮到規模和vieport的位置。我對麼 ?如果不是,請證明我錯了。

回答

2

是的,這是正確的。視口中的所有點都會出現在畫布上 - 只有那些點 - 所有內容都會右對齊,保留距離。

+1

快速反應的歡呼聲 - 我現在可以死一個快樂的人 – Maciek 2009-10-20 22:28:35

0

您可能會發現爲管理比例和範圍的視口創建類很有用。它可以有方法,如

Point2 vp = viewport.transformFromWorld(Point2 pw); 

和逆:

Point2 pw = viewport.transformToWorld(Point2 vp); 

,如果你選擇在視口中座標的觀點出發點,並希望改變世界,這非常有用。

相關問題