使用 PyEphem 计算阴影长度

2023-11-24

我正在使用 PyEphem 并想要计算阴影的长度(假设一根单位长度的棍子种植在地上)。长度由 cot(phi) 给出,其中 phi 是太阳高度角(如果我错了,请纠正我)。我不知道在太阳上使用什么场?在下面的示例中,我使用角度 alt:

import ephem, math
o = ephem.Observer()
o.lat, o.long = '37.0625', '-95.677068'
sun = ephem.Sun()
sunrise = o.previous_rising(sun, start=ephem.now())
noon = o.next_transit(sun, start=sunrise)
shadow = 1 / math.tan(sun.alt)

请检查下面我的解释:

  1. 如果切线无穷大,说明太阳在头顶正上方,没有阴影。
  2. 如果正切为零,则表明太阳位于地平线,影子无限长。
  3. 我不知道如何解释 cot(phi) 的负面结果。有人能帮我吗?

最后,我对如何使用 PyEphem 从阴影长度向后工作到下一次太阳将投射该长度的阴影(给定 ephem.Observer())感到困惑。

我将不胜感激这方面的帮助。


在太阳上使用什么场?

The sun.alt是正确的。alt是地平线以上的高度;与北方以东的方位角一起定义了表观位置相对于地平线。

你的计算几乎是正确的。您忘记提供观察者:sun = ephem.Sun(o).

  1. 我不知道如何解释 cot(phi) 的负面结果。能 谁来帮帮我?

在这种情况下,太阳位于地平线以下。

最后,我对如何使用感到困惑 PyEphem 从 a 向后工作 到下一次的阴影长度 太阳会投下它的影子 长度,给定 ehem.Observer()。

这是一个给出函数的脚本:g(date) -> altitude计算下一次太阳投射与现在长度相同的阴影的时间(不考虑阴影的方位角方向):

#!/usr/bin/env python
import math
import ephem    
import matplotlib.pyplot as plt
import numpy as np
import scipy.optimize as opt

def main():
    # find a shadow length for a unit-length stick
    o = ephem.Observer()
    o.lat, o.long = '37.0625', '-95.677068'
    now = o.date
    sun = ephem.Sun(o) #NOTE: use observer; it provides coordinates and time
    A = sun.alt
    shadow_len = 1 / math.tan(A)

    # find the next time when the sun will cast a shadow of the same length
    t = ephem.Date(find_next_time(shadow_len, o, sun))
    print "current time:", now, "next time:", t # UTC time
    ####print ephem.localtime(t) # print "next time" in a local timezone

def update(time, sun, observer):
    """Update Sun and observer using given `time`."""
    observer.date = time
    sun.compute(observer) # computes `sun.alt` implicitly.
    # return nothing to remember that it modifies objects inplace

def find_next_time(shadow_len, observer, sun, dt=1e-3):
    """Solve `sun_altitude(time) = known_altitude` equation w.r.t. time."""
    def f(t):
        """Convert the equation to `f(t) = 0` form for the Brent's method.

        where f(t) = sun_altitude(t) - known_altitude
        """
        A = math.atan(1./shadow_len) # len -> altitude
        update(t, sun, observer)
        return sun.alt - A

    # find a, b such as f(a), f(b) have opposite signs
    now = observer.date # time in days
    x = np.arange(now, now + 1, dt) # consider 1 day
    plt.plot(x, map(f, x))
    plt.grid(True)
    ####plt.show()
    # use a, b from the plot (uncomment previous line to see it)
    a, b = now+0.2, now+0.8

    return opt.brentq(f, a, b) # solve f(t) = 0 equation using Brent's method


if __name__=="__main__":
    main()

Output

current time: 2011/4/19 23:22:52 next time: 2011/4/20 13:20:01
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 PyEphem 计算阴影长度 的相关文章

随机推荐

  • 如何分析在生产服务器上运行的 ASP.NET 应用程序?

    我有一个 ASP NET 应用程序 在生产服务器上始终使用 75 100 的 CPU 如何分析应用程序以找出代码的哪一部分占用了最多的 CPU 我研究了几种不同的工具 Xte Profiler EQATEC dotTrace 但它们似乎都希
  • `filter(func)` 和 `filter(|x| func(x))` 有什么区别?

    有什么区别filter x func x and filter func 也许一个好的起点是了解如何filter func 可以使用类似于以下的语法来编写filter x func x 我的代码如下所示 fn filter out dupl
  • Application.Current.MainWindow.Close 与 Application.Current.Shutdown

    Should Application Current Shutdown 不作为关闭 WPF 应用程序的最佳实践吗 我有一个小型的多窗口应用程序 关闭 似乎对我的所有退出命令都很有效 但是 我被告知要始终使用Application Curre
  • 使用 Nodejs 的 Firebase 电话身份验证

    我查看了 firebase 的文档 但没有得到任何在服务器端通过电话验证用户身份的答案 我发现的只是 FIREBASEUI 或客户端身份验证 那么 我如何通过服务器端对用户进行身份验证 例如以表单形式向他们提供电话号码的输入 并在该表单上向
  • datetime_select 的值为零?

    当使用 作为 新 对象表单时 如何将选项设置为默认不选择日期而是选择 nil null 值 相关模型中的字段可以选择为空 但默认情况下 datetime select 控件没有空选项 我想你想要 f datetime select star
  • 简单的去抖动例程

    您是否有一个简单的去抖例程可以方便地处理单个开关输入 这是一个简单的裸机系统 没有任何操作系统 我想避免具有特定计数的循环构造 因为处理器速度可能会波动 我想你可以在这里学到很多东西 http www ganssle com debounc
  • 如何忽略数组解构中的某些返回值?

    当我只对索引 0 之外的数组值感兴趣时 在数组解构时是否可以避免声明无用的变量 在下文中 我想避免声明a 我只对索引 1 及以后感兴趣 How can I avoid declaring a const a b rest 1 2 3 4 5
  • 如何使用 Node.js 抓取包含动态内容的页面?

    我正在尝试刮一个website但我没有得到一些元素 因为这些元素是动态创建的 我在node js中使用cheerio 我的代码如下 var request require request var cheerio require cheeri
  • 如何在coldfusion中使用CFQuery执行2个或多个插入语句?

    是否可以使用执行 2 个插入或更新语句cfquery 如果是的话怎么办 如果不是 在 Coldfusion 中执行多个查询的最佳方法是什么 即仅打开一个到数据库的连接 我想每次我们打电话cfquery我们正在打开新的连接数据库 是否可以执行
  • Ember、Ember 数据和 MongoDB 的 _id

    我已经看到有人讨论过这个问题 但我仍然对处理 Mongo 的问题有疑问 id into id 我使用 mongoose 作为我的 ORM 虽然它有虚拟 但我似乎无法让它正常工作 以下是我的猫鼬模型中的内容 尝试从后端修复 mongoose
  • 如何在列表视图中实现OnScrollListener?

    我从服务器获取 500 条记录 我想在列表视图中显示 10 个项目 当列表视图到达末尾时我需要加载另外 10 个项目 依此类推 我在网上看到了很多例子 但我无法解决它 请帮助我 这是我的代码 public void onCreate Bun
  • C# 泛型继承和协变第 2 部分

    这是我的原始线程 C 泛型继承和协变 仅在我的只读界面上 我希望继承起作用 public delegate Boolean EnumerateItemsDelegate
  • 包包含同名的对象和包

    我在使用 Maven 或 Eclipse 编译一些 Scala 时遇到问题 我尝试从包含命名空间和同名类的 Java jar 导入一个类 我可以编译scalac 然而 例如 Java 项目 jar 包含 src foo bar java s
  • 如何在 Node.js Web 应用程序中管理 MongoDB 连接?

    我正在使用节点 mongodb native用MongoDB驱动写一个网站 我对如何管理连接有一些疑问 仅使用一个 MongoDB 连接来处理所有请求是否足够 是否存在任何性能问题 如果没有 我可以设置一个全局连接以在整个应用程序中使用吗
  • Xcode 4.2 无法调试 iOS 4.2.1 (8C148)

    我最近更新到 Xcode 4 2 我还将我的新 iPad 2 和 iPod 最新一代 更新到了 iOS 5 我构建了我的应用程序并且可以毫无问题地调试它们 我运行 iOS 4 2 1 8C148 的旧版 iPod 无法运行 也没有出现任何错
  • Firebase BigQuery 服务器偏移时间

    背景 我正在将 Firebase 分析数据导出到 BigQuery 我正在使用 cron 作业来处理 BigQuery 中的数据以获得洞察力 Problem 为了能够只处理增量数据 即自上次运行 cron 作业以来到达的数据 我需要一种方法
  • .htaccess URL 重写挑战

    我在某些 URL 重写方面遇到问题 下面的所有内容都工作正常 但我需要添加一条从 URL 中删除查询字符串的规则 site com page a b会变成site com page 有人可以帮忙吗 我已经阅读了一些关于 htaccess 的
  • 如何在Nuxt SSR模式下更改页面的URL而不重新加载整个页面?

    我正在尝试构建一个主详细信息视图 其中列表和详细信息在桌面上并排显示 但在移动设备上的不同页面上显示 如下图所示 我的列表中可能有 500 到 10000 个项目要显示 我用 10000 个项目模拟了这两种方法 请随意更改 server a
  • 如何使用 Java 类运行 Hadoop?

    我正在关注这本书Hadoop 权威指南 我对示例 3 1 感到困惑 有一个 Java 源文件 URLCat java 我用javac将其编译为 URLCat class 然后使用jar把它包进罐子里 书上说要用 hadoop URLCat
  • 使用 PyEphem 计算阴影长度

    我正在使用 PyEphem 并想要计算阴影的长度 假设一根单位长度的棍子种植在地上 长度由 cot phi 给出 其中 phi 是太阳高度角 如果我错了 请纠正我 我不知道在太阳上使用什么场 在下面的示例中 我使用角度 alt import