如何计算空间仰角/俯角以查询theta、phi参数对应的天线增益
垂直角计算优化方案
核心思路
抛弃基于水平角阈值的硬切逻辑,改用水平面向量点积判断目标所在半区,实现角度连续映射,完全适配无人机、基站两类天线的计算需求。
具体实现步骤
1. 统一变量定义(以计算观测端天线指向目标端的垂直角为例)
- 观测端:当前计算增益的天线搭载设备(无人机/基站)
- 目标端:通信对端设备
- 视线向量
vec = (dx, dy, dz) = (target_x - obs_x, target_y - obs_y, target_z - obs_z) - 观测端天线水平主瓣指向向量
vec_hor:根据天线主波束水平指向角转换得到,z分量固定为0,例如指向正北时为(0, 1, 0),指向正南时为(0, -1, 0)
2. 计算基础参数
import math # 计算视线向量在水平面的投影及模长 hor_dx, hor_dy = dx, dy hor_dist = math.hypot(hor_dx, hor_dy) # 特殊情况:两点在同一竖直线上,直接赋值即可 if hor_dist == 0: raw_vert = 90 if dz > 0 else -90 else: raw_vert = math.degrees(math.atan2(dz, hor_dist)) # 计算水平投影和天线主瓣指向的点积 dot_product = hor_dx * vec_hor[0] + hor_dy * vec_hor[1]
3. 映射到0-359度垂直角
if dot_product >= 0: # 目标在天线水平前半区 final_vert = raw_vert % 360 else: # 目标在天线水平后半区 final_vert = (180 - raw_vert) % 360 # 确保角度落在0-359区间 if final_vert < 0: final_vert += 360
适配说明
如果你的CSV中垂直角的0度定义、顺时针/逆时针递增规则和计算结果存在固定偏移,仅需在最终结果上加上偏移量后再对360取模即可,无需修改核心逻辑。无人机和基站侧的计算完全复用同一套逻辑,仅需替换观测端、目标端坐标,以及对应观测端的vec_hor参数即可。
原问题修复验证
你提到的基站后方红点场景,点积计算结果为负,若原始计算得到的raw_vert为70度,最终映射结果为180-70=110度,和预期完全一致,且没有硬边界跳变问题。
内容的提问来源于stack exchange,提问作者PaulK
相关产品推荐
相关产品推荐

