ポイントをワールド座標からスクリーン座標に変換する際に問題が発生しています。トラックを描画するために、5px ごとにポイントで構成されるトラックを持つマップがあります。地図は 2500x2000 で、キャンバス (電話画面) は 800x600px です。
車が動くまでスマホの画面に見える軌跡だけを描きたい。そこで、(point.x > mapx) と (point.x < mapx + screenWidth) のポイント配列からポイントを取得し、Y についても同様に取得しました。これにより、画面上にあったトラックの現在のポイントがすべて取得されました。
ここで、これらを画面座標に変換して表示する必要がありますが、ここで行き詰まっています。たとえば、マップの右側のポイントは 2200x1000 かもしれませんが、画面が 800x600 しかないため、ここには描画できません。
これらを変換する助けはありますか?
ありがとう
onDraw() メソッドから呼び出されるコード:
// loop track array
Point point;
for (int i = 0; i < this.trackPoints.size(); i++) {
point = this.trackPoints.get(i);
// if that piece of track is on the screen currently then add to
// array
if ((point.x > mapx) && (point.x < mapx + this.getWidth())
&& (point.y > mapy) && (point.y < mapy + this.getHeight())) {
//translate point back to screen-coords
Log.v("visibletrack", "adding point x = " + point.x + " point y = " + point.y);
Log.v("visibledebugging", "mapmaxx = " + this.mapMaxX + " mapmaxy = " + this.mapMaxY);
Log.v("visibledebugging", "scale x = " + scaleX + " scaley = " + scaleY);
this.visibleTrackPoints.add(new Point((int)(point.x/scaleX), (int)(point.y/scaleY)));
}
}
上記の作業は、画面に表示されるはずのトラックのポイントを取得できますが、画面に「大きく」描画されるように変換する必要があります。たとえば、マップが 2000,100 でクリップされ、ここにポイントがあった場合、そのポイントは画面上の 0,100 に描画される必要があります。したがって、これらの最初の座標を画面上の正しい位置に変換する必要があります。