【问题标题】:Translating x,y while scaling缩放时平移 x,y
【发布时间】:2015-08-11 23:29:24
【问题描述】:

我正在尝试绘制 x,y 坐标,其中窗口大小为 600 像素 x 600 像素。 (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 为 0.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。

任何想法都会非常有帮助。

【问题讨论】:

  • 你应该扩展你的问题。也许给一个示例图片,说明您拥有什么以及您想要什么会有所帮助。
  • 我建议将纬度/经度从 [-PI/2;PI/2] 转换为 [0;PI] 以仅匹配正值。这样就可以简单地转换成窗口坐标
  • @MABVT 我不确定我是否理解如何做到这一点。能举个例子吗?
  • 您有一个弧度值,它是经度的区间 [-PI,PI] (-180°,180°) 和 [-PI/2,PI/2] (-90°) ,90°) 表示纬度。通过应用适当的公式将经度移动到 (0,360) 即 [0,2PI] 和纬度到 (0,180) 或 [0,PI](我将把它留给你作为思考的食物)。然后您可以将这些映射到屏幕坐标 [0,600]
  • 如果我的回答有用,请标记为答案。

标签: c++ allegro5 cartesian-coordinates


【解决方案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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    相关资源
    最近更新 更多