我在将点从世界坐标转换为屏幕坐标时遇到问题。我有一张地图,其轨道由每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处绘制。所以我需要将这些第一个坐标转换为屏幕上的正确位置。
答案 0 :(得分:0)
目前还不完全清楚你的问题是什么。如果你的坐标系统的起源一致,那么我认为这只是将一个适当的比例因子应用于一个系统中的坐标以达到另一个系统中的比例坐标。它每个坐标系的起源都不重合,那么你还需要应用变换和缩放。
而不是编程问题,我认为这是一个数学问题。