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

如何从0-360度数值计算8方位风向(Delphi应用)

Delphi 风向角度转8方位罗盘及箭头显示实现

核心计算逻辑

8个罗盘方位各占45°(360°/8),通过角度偏移+取模+整除的方式直接计算方位索引,替代繁琐的if..then判断:

  1. 给原始风向角度加上22.5°(每个方位的半宽),让每个方位的中心角度对齐到45°的整数倍
  2. 对360°取模,确保角度始终落在0-360°范围内
  3. 将结果除以45°,取整数部分得到0-7的索引,对应预设的方位和箭头数组

Delphi 代码实现

const
  // 8个罗盘方位定义
  CompassDirections: array[0..7] of string = ('N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW');
  // 对应Unicode箭头符号(需确保项目支持Unicode)
  ArrowSymbols: array[0..7] of string = ('↑', '↗', '→', '↘', '↓', '↙', '←', '↖');

function WindDegToDirectionIndex(ADegrees: Double): Integer;
begin
  // 调整角度区间并计算索引
  ADegrees := (ADegrees + 22.5) Mod 360;
  Result := Trunc(ADegrees / 45);
end;

// 调用示例:更新窗体上的风向显示
procedure TForm1.UpdateWindDisplay(WindDeg: Double);
var
  DirIndex: Integer;
begin
  DirIndex := WindDegToDirectionIndex(WindDeg);
  // 显示罗盘方位文本
  lblCompass.Caption := CompassDirections[DirIndex];
  // 显示箭头符号
  lblArrow.Caption := ArrowSymbols[DirIndex];
end;

补充说明

  • 角度偏移22.5°的作用:让原始角度中337.5°-22.5°的正北区间,转换为0°-45°对应索引0(N);22.5°-67.5°的东北区间转换为45°-90°对应索引1(NE),以此类推
  • Mod 360可处理API返回的异常角度(如370°或-10°),确保计算有效
  • 若使用旧版Delphi不支持Unicode箭头,可替换为自定义箭头图片或通过Canvas绘制箭头

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 05:45:34