python正方形阴影面积计算_使用PyEphem计算阴影长度

what field to use on the Sun?

sun.alt是正确的。alt是地平线以上的高度;加上北面以东的方位角,它们定义了相对于地平线的{a1}。在

你的计算几乎是正确的。您忘了提供观察者:sun = ephem.Sun(o)。在I don't know how to interpret negative results from cot(phi). Can

someone help me?

在这种情况下,太阳在地平线以下。在Finally, I'm confused about how to use

PyEphem to work backwards from a

shadow length to the next time when

the sun will cast a shadow of that

length, given an ephem.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()

输出

^{pr2}$

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值