在缩放时平移x,y

时间:2015-08-11 23:29:24

标签: c++ allegro5 cartesian-coordinates

我试图绘制x,y坐标,其中窗口大小为600px乘600px。 (0,0)将在左上角。 (300,300)中间的窗户。 (600,600)将位于右下方。 我试图将弧度的纬度/经度转换为像素,然后绘制它们。 我计算1px =?拉

`fabs(lborder+rborder)/600`

我通过采用顶部和底部边框来计算lon。 然后,当我想找到特定纬度或经度的特定位置时:

lat/(previous # calculated above)

问题是我的窗口从0,0到600,600,如上所述,我可以得到负面点,我不知道如何移动它们,我不知道如何将它们集中在300,300左右边界发生了变化。

目前,只要我根据(x,y)而不是像素制作中心(0,0),就可以在他们应该去的地方绘制点。 例如,如果x是-1到1而y是-3到3,(300px,300px)将是(0,0)。

如果我将界限改为x -.5为1,y-3为.5,则(300px,300px)为(.25,1.25)。但是,上面用这些数字计算。

1.5/600 = .0025 ----> 1px = .0025lat.
3.5/600 = .0058 ----> 1px = .0058lon.

然后取中点(.25,1.25):

.25/.0025 = 100px
1.25/.0058 = 215px

尽管是图表的中心,但显然不是300px,300px。

任何想法都会非常有用。

1 个答案:

答案 0 :(得分:1)

如果您想将坐标调整到中心,那么可能是这样的事情吗?

Coord coordsFromCenter(Coord old_coord, float height, float width)
{
    Coord new_center;

    float new_x_center = width/2.0;
    float new_y_center = height/2.0;

    new_center.set_x(old_coord.get_x() - new_x_center);
    new_center.set_y(old_coord.get_y() - new_y_center);

    return new_center;
}