2D エリアをナビゲートできるスケーラブルなビューポートを実装する方法を思い出そうとして、夜の大半を鉛筆で座っていました。初めて聞いてからずいぶん経ちましたが、わかったと思います。確認する必要があります。
「古典的な」デカルト座標系の 2D 世界があり、x 軸は右を指し、y 軸は上を指します。
ワールド領域には、2 つの点 Pmin と Pmax で定義された長方形のビューポートがあります 。ここで、 Pmin(xmin, ymin)、Pmax(xmax, ymax)です。これらのポイントは、ビューポートのサイズ、位置、およびスケールを定義します
ワールド領域には、 Pmin < P(x, y) < Pmaxである点 P があります。(P はビューポート rect にあります)
全体を表示するために、「変更された」座標系、x 軸が右、 y 軸が下を指すキャンバス (たとえば) があります。キャンバスのサイズはMaxX と MaxYです。キャンバスのサイズは固定です。
ここで、ポイントP'(x', y')をキャンバスに表示するには、次のように位置を計算する必要があります。
x' = (x - xmin) * Sx
、 どこSx = MaxX / (xmax - xmin)
y' = MaxY - (y - ymin) * Sy
、 どこSy = MaxY / (ymax - ymin)
*canvas の座標系により、y' 座標が反転していることに注意してください
言い換えれば、上記の計算は、スケールとビューポートの位置を考慮しながらポイントを表示する必要があります。私は正しいですか?そうでない場合は、私が間違っていることを証明してください。