我在将点从世界坐标转换为屏幕坐标时遇到问题。我有一张地图,它有一条由每 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 处绘制。所以我需要将这些第一个坐标转换为它们在屏幕上的正确位置。