正在开发一种工具,根据给定机场的真实世界风,为飞行模拟爱好者推荐跑道.最终目标是比较并返回列表中可用跑道的列表,列表顶部显示最小的风差异.

我想说,我可能有95%的需要,但当风向接近0度(指南针上360度)时,会变得很滑.

如果跑道航向为029,风向为360,则两者相差仅29度,但我所写的公式显示相差331度.

作为比较的一部分,我try 过使用abs()进行实验,但没有取得任何成果.我将把我目前的结果链接到这里:https://extendsclass.com/php-bin/7eba5c8

try 切换风向和跑道方向的比较(从另一个中减go 一个,然后从另一个方向进行),结果相同.

我确信,关键在于一些我无法掌握的三行小胡说八道(我想,自学成才的牛仔程序员的缺点).

大约11年前,我看到一篇关于如何用C#实现这一点的帖子,但我从来没有在编程世界的那个特别深沉、黑暗的角落里捣乱过.

代码如下:

<?php
    echo "<pre>\n";
    //Dummy Runways. Will be replaced by data from AVWX
    $rwy_hdgs = array(
    "04R" => "029",
    "04L" => "029",
    "22R" => "209",
    "22L" => "209",
    "03R" => "029",
    "03L" => "029",
    "21L" => "216",
    "21R" => "216",
    "09L" => "089",
    "09R" => "089",
    "27R" => "269",
    "27L" => "269"
    );
    
    //Dummy Wind Heading. Will be replaced by data from AVWX
    $wind_dir = "360";
    
    $runways = array();
    $i = 1;
    foreach($rwy_hdgs as $key => $value)
    {
            $diff = $value - $wind_dir;
            
            $runways[$i]["rwy"] = $key;
            $runways[$i]["hdg"] = $value;
            $runways[$i]["diff"] = abs($diff);
            $i++;
        
    }
    //Select "diff" value
    $diff = array_column($runways, "diff");
    
    //Sort $runways by difference betweeen wind and runways, with smallest value first
    array_multisort($diff, SORT_ASC, $runways);
    
    foreach ($runways as $runway){
        echo "Wind Heading: " . $wind_dir . "\n";
        echo "Runway: " . $runway["rwy"] . "\n";
        echo "Heading: " . $runway["hdg"] . "\n";
        echo "Variance: " . $runway["diff"] . "&#176;\n\n";
    }
    echo "</pre>\n";
?>

推荐答案

当你在一个圆中减go 两个Angular 时,你可以 Select "短距离"或"长距离"——这是一个圆...因此,你必须计算两种方法,然后找出哪一种更短——以及方向,因为你有一个固定的起始角和一个固定的目标角:

function angleDiff($angleStart, $angleTarget) {
  $delta = $angleTarget - $angleStart;
  $direction = ($delta > 0) ? -1 : 1;
  $absDelta1 = abs($delta);
  $absDelta2 = 360 - $absDelta1;
  return $direction * ($absDelta1 < $absDelta2 ? $absDelta1 : $absDelta2);
}

这应该给你正数表示顺时针旋转,负数表示从起始Angular 到目标Angular 逆时针旋转.

Php相关问答推荐

如何在搜索域名时重定向到登陆页?

如果再次调用SESSION_START(),会话.gc-max是否会重新启动?或者它是从第一次创建会话开始计算的?

Nginx重写扩展名为.php的动态URL

在Laravel Eloquent中实现一对多关系

按与WooCommerce管理顺序列表中的特定字符串不匹配的特定元值筛选订单

WooCommerce-在选定类别中每消费X个金额即可添加免费礼物

无法使用php IMAP从Gmail获取收件箱

从目录文件夹中获取文件并追加到 Select 下拉列表(选项)-wordpress/wc

如何将LARAVEL模块路径和项目路径合并,因为当我使用模块路径时,它们会覆盖项目路径

fpm-php + nginx + POST数据

如何使用PHP从TXM(XML)标记中读取特定属性

如何使用 PHP 将带有图像的文本上传到 Linkedin?

主机中未检索用户表数据

如何在 php 中获取正确的时间

Windows 身份验证在 IIS 中验证什么?我可以在我的情况下禁用匿名身份验证吗?

PHP使用三元运算符进行null合并(再次)

Xdebug 不会在断点处停止

按前 3 列对二维数组中的行数据进行分组,然后用逗号连接每组中的其余列

将样式文件或脚本引入WordPress模板

如何使 Wordpress Woocommerce 自定义输入字段成为必填字段