Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Applescript 为什么赢了';我的sunrise/sunset应用程序脚本不能给我正确的输出吗?_Applescript_Date Sunrise - Fatal编程技术网

Applescript 为什么赢了';我的sunrise/sunset应用程序脚本不能给我正确的输出吗?

Applescript 为什么赢了';我的sunrise/sunset应用程序脚本不能给我正确的输出吗?,applescript,date-sunrise,Applescript,Date Sunrise,我正在尝试编写一个代码来确定当前日期和位置的日出和日落。对于后者,我使用doshell脚本“~…LocateMe”,然后使用-f函数获取纬度、经度和海拔高度。由于高度以米为单位,我将其乘以3.28084得到英尺 代码的其余部分仅使用计算该时间和位置的日出。我必须处理trig函数,但由于它是以弧度计算的,而上面的方程出于某种原因使用度,我小心地将度乘以π/180,将反trig公式乘以180/π 代码输出一个朱利安日期,这是应该的。但它输出了今天的日出,例如2017年7月18日,即今晚午夜之前。因为

我正在尝试编写一个代码来确定当前日期和位置的日出和日落。对于后者,我使用
doshell脚本“~…LocateMe”
,然后使用
-f
函数获取纬度、经度和海拔高度。由于高度以米为单位,我将其乘以3.28084得到英尺

代码的其余部分仅使用计算该时间和位置的日出。我必须处理trig函数,但由于它是以弧度计算的,而上面的方程出于某种原因使用度,我小心地将度乘以π/180,将反trig公式乘以180/π

代码输出一个朱利安日期,这是应该的。但它输出了今天的日出,例如2017年7月18日,即今晚午夜之前。因为坐标计算错误而耽误几分钟是一回事,但这不会太遥远。那么我哪里出了问题

set n to ((current date) - (date "Saturday, January 1, 2000 at 12:00:00 PM")) / days
set n to n div 1

set longitude to do shell script "~/Library/Application\\ Support/LocateMe/LocateMe -f \"{LON}\""
set latitude to do shell script "~/Library/Application\\ Support/LocateMe/LocateMe -f \"{LAT}\""
set altitude to do shell script "~/Library/Application\\ Support/LocateMe/LocateMe -f \"{ALT}\""
set altitude to altitude * 3.28084

set Jstar to (n - (longitude / 360))

set M to ((357.5291 + (0.98560028 * Jstar)) mod 360)

set x to 1.9148 * (sin (M * pi / 180))
set y to 0.02 * (sin (2 * M * pi / 180))
set z to 3.0E-4 * (sin (3 * M * pi / 180))
set C to (x + y + z)

set lambda to ((M + C + 180 * 102.9372) mod 360)

set q to 2.4515455E+6
set r to (0.0053 * (sin (M*pi/180)))
set s to (-0.0069 * (sin (2 * lambda*pi/180)))
set Jtransit to (q + Jstar + r + s)

set d to ((asin (sin (lambda * pi / 180) * (sin (23.44 * pi / 180)))) * 180 / pi)

set numerator to (sin ((-0.83 - (1.15 * (sqrt (altitude))) / 60) * pi / 180) - (sin (latitude * pi / 180) * (sin (d * pi / 180))))
set denominator to (cos (latitude * pi / 180) * (cos (d * pi / 180)))
set HRA to ((acos (numerator / denominator)) * 180 / pi)

set sunrise to (Jtransit - (HRA / 360))
set sunset to (Jtransit + (HRA / 360))
在注意到我在π/180岁时不太小心的一个位置后,这个公式现在持续记录日出和日落,大约比它应该的晚19个小时。比如说,今天早上的日出是。公式将在今晚凌晨1:45输出。我确信所有的计算都是正确的;问题是它输出了错误的朱利安日

编辑:我意识到等式中的
n
就是今天。我的公式最初包括一天的剩余部分。我添加了第2行来说明这一点;也许有点奇怪,但这是我能想到的最好的了


这就是说,现在的公式给出了日出时间为晚上7:30的时间——仍然很遥远,但比以前更近了。

在中间计算中,哪里出了差错?@ScottHunter这正是我无法理解的。我的代码似乎和日出方程一样,但我不知道它有什么不同;如果结果是关闭的,则还必须执行一些中间步骤,这将缩小问题所在的范围。@Scott在Jtransit的计算中发现了一个问题。将完全相同的公式插入desmos得到2.44957965041E+6,而AppleScript得到2.457953788952E+6。更仔细地观察我对r和s的计算,我意识到我在用π/180乘以所有角度时并不像我想象的那样小心……)不过,我似乎无法压扁这些虫子:它们无法在超过千分之一的偏角
d
上达成一致。至于
分子
:他们不能同意第一个正弦表达式。虽然我的applescript的第二个和第三个正弦都是负数,而desmos的第二个和第三个正弦都是正数,但将它们相乘会产生相同的结果,所以这不重要。