0

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

4

1 回答 1

0

目前尚不完全清楚你的问题是什么。如果您的两个坐标系的原点重合,那么我认为只需将适当的比例因子应用于一个系统中的坐标即可得出另一个系统中的比例坐标。如果每个坐标系的原点不重合,那么您还需要应用变换和缩放。

我认为这不是一个编程问题,而是一个数学问题。

于 2013-10-23T11:26:53.320 回答