You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GoPro Max 360等距柱状投影图方位角高度角转(x,y)像素坐标咨询

实现方案

该坐标转换功能完全可实现,基于等距柱状投影的线性映射规则,结合你给出的预设前提和已知参数可直接推导转换逻辑。

前置参数约定

以下是默认角度规则,如果你实际使用的角度定义不同,可对应调整偏移逻辑:

  • 方位角Azimuth°:以正北为0°,顺时针旋转增加,取值范围0~360°
  • 高度角Altitude°:以水平方向为0°,向上为正、向下为负,取值范围-90°~+90°
  • 图像坐标约定:左上角为原点(0,0),x轴向右增加,y轴向下增加
  • 固定已知参数:图像宽5760px、高2880px,赤道(高度角0°)对应y=1440px,图像中心x=2880px对应正南方位(方位角180°)

转换公式推导

等距柱状投影的水平、垂直方向均为角度的线性映射:

  • 水平方向360°对应全宽5760px,单度对应像素值 = 5760 / 360 = 16px/°
  • 垂直方向180°(-90°~+90°)对应全高2880px,单度对应像素值 = 2880 / 180 = 16px/°

x坐标计算

以图像中心(x=2880px,对应方位角180°)为基准,方位角相对于180°的偏差直接换算为水平像素偏移:
x = 2880 + (Azimuth - 180) * 16
计算后对5760取模,确保x落在0~5759的有效范围内。

y坐标计算

以赤道线(y=1440px,对应高度角0°)为基准,由于图像y轴向下增长,高度角每增加1°,y值减少16px:
y = 1440 - Altitude * 16
计算后将y限制在0~2879的有效范围内即可。

Python 实现代码

def ConvertCoords(azimuth: float, altitude: float) -> tuple[int, int]:
    # 先处理角度范围
    azimuth = azimuth % 360
    altitude = max(min(altitude, 90), -90)
    
    # 计算坐标
    x = 2880 + (azimuth - 180) * 16
    y = 1440 - altitude * 16
    
    # 裁剪到有效像素范围
    x = int(round(x % 5760))
    y = int(round(max(min(y, 2879), 0)))
    
    return (x, y)

验证示例

你可以用已知点位测试匹配度:

  • 正南、水平高度:传入(180, 0),返回(2880, 1440),对应图像中心赤道位置
  • 正东、水平高度:传入(90, 0),返回(1440, 1440),对应图像左半部分赤道位置
  • 天顶任意方位:高度角传入90,返回y值为0,对应图像最顶端
  • 天底任意方位:高度角传入-90,返回y值为2879,对应图像最底端

如果你的方位角定义和上述约定不同(比如以正南为0°基准,向左为正),仅需调整x坐标计算中的偏移常量即可,核心线性映射逻辑不变。

内容的提问来源于stack exchange,提问作者FancyAM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 00:06:03