【发布时间】: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