人类很早就注意到飞蛾扑火这一奇怪的现象,并且自作主张地赋予了飞蛾扑火很多含义,引申出为了理想和追求义无反顾、不畏牺牲的精神。但是,这种引申和比喻,征求过飞蛾的意见吗?
后来,生物学家又提出来昆虫趋光性这一假说来解释飞蛾扑火。不过,这个假说似乎也不成立。如果昆虫真的追逐光明,估计地球上早就没有昆虫了——它们应该齐刷刷整体移民到太阳或月亮上去了。
仔细观察飞蛾扑火,就会发现,昆虫们并不是笔直地飞向光源,而是绕着光源飞行,同时越来越接近光源,最终酿成了“惨案”。这一行为被解释成“失误”似乎更合理一点。既然火烛危险,那么飞蛾为什么要绕着火烛飞行呢?
最新的解释是,飞蛾在夜晚飞行时是依据月光和星光作为参照物进行导航的。星星和月亮离我们非常远,光到了地面上可以看成平行光,当飞蛾的飞行路径保持与光线方向成恒定夹角时,飞蛾就变成了直线飞行,如下图所示。
然而,当飞蛾遇到了火烛等危险光源时,还是按照以前的飞行方式,路径保持与光线方向成恒定夹角,以为依旧能飞成一条直线,结果悲剧了。此时它的飞行轨迹并不是一条直线,而是一条等角螺旋线,如下图所示。
可怜的飞蛾!亿万年进化出来的精准导航,在人工光源的干扰下竟如此不堪。
螺线及等角螺线
螺线家族很庞大,比如,阿基米德螺线、费马螺线、等角螺线、双曲螺线、连锁螺线、斐波那契螺线、欧拉螺线等等。等角螺线,又叫对数螺线,螺线家族的一员。
早在2000多年以前,古希腊数学家阿基米德就对螺旋线进行了研究。公元1638年,著名数学家笛卡尔首先描述了对数螺旋线(等角螺旋线),并列出了螺旋线的解析式。这种螺旋线有很多特点,其中最突出的一点就是它的形状,无论你把它放大或缩小它都不会有任何的改变。就像我们不能把角放大或缩小一样。
用极坐标分析法分析飞蛾扑火的飞行轨迹,可知,轨迹线上任意一点的切线与该点与原点的连线之间的夹角是固定的,这就是等角螺线得名的由来。因为分析过程使用了对数,所以等角螺线又叫对数螺线。我不太会用LaTeX写数学公式,所以就用 python 的方法写出螺线方程。其中,fixed 表示螺线固定角,大于 pi/2 则为顺时针螺线,小于 pi/2 则为逆时针螺线。theta 表示旋转弧度,r 表示距离中心点距离。
r = fixed*np.exp(theta/np.tan(fixed))
等角螺线在生活中也经常见到,比如,鹦鹉螺的花纹、玫瑰花瓣的排列,星系的悬臂,低气压云图等。
绘制等角螺线
给定中心点和固定角,一个等角螺线就被唯一地确定了。这个螺线可以绕很多圈,可以填满整个宇宙。但很多时候,我们往往只需要观察螺线上的一小部分,这时候就需要两个参数来约定:一个叫作 circle,表示你希望看到多少圈螺线,一个叫作 phase,表示螺线的可见部分向内(顺时针)或向外(逆时针螺线)旋转多少圈。
这是使用 matplotlib 绘制等角螺线的函数,其中固定角参数 fixed 做了一点处理:以度(°)为单位,以零为中心,大于零则为顺时针螺线,小于零则为逆时针螺线
import numpy as np import matplotlib.pyplot as plt from pylab import mpl mpl.rcParams['font.sans-serif'] = ['FangSong'] mpl.rcParams['axes.unicode_minus'] = False def plotSpiral(core, fixed, phase=0, circle=4): """绘制等角螺线 core - 等角螺线的中心坐标,tuple类型 fixed - 等角螺线的固定角度,单位:度(°)。fixed大于零则为顺时针螺线,小于零则为逆时针螺线 phase - 初始相位,单位:圈(360°)。对顺时针螺线,该数值越大,螺线越大,对逆时针螺线则相反 circle - 螺线可见部分的圈数,单位:圈(360°) """ plt.axis("equal") plt.plot([core[0]], [core[1]], c='red', marker='+', markersize=10) fixed_rad = np.radians(90 + fixed) theta = np.linspace(0, circle*2*np.pi, 361) + phase*2*np.pi r = fixed_rad*np.exp(theta/np.tan(fixed_rad)) x = r*np.cos(theta) + core[0] y = r*np.sin(theta) - core[1] plt.plot(x, y, c='blue') plt.show()
下图展示了逆时针等角螺线各个参数的意义:
下图展示了顺时针等角螺线各个参数的意义:
拟合等角螺线
在台风定位时,需要手动确定台风中心位置,并标识出台风螺线轨迹上的部分点,然后逆合出螺线方程。如下图所示,蓝色十字为台风中心点,5个黄色圆点是手工标注的台风螺线轨迹上的点。
以下为拟合函数
import numpy as np from scipy import optimize def fit_spiral(core, dots): """拟合等角螺线,返回定角fixed,初始相位phase""" fixed_ccw = 0.445*np.pi fixed_cw = 0.555*np.pi # 将dots拆分成x_list和y_list x_list, y_list = list(), list() for x, y in dots: x_list.append(x-core[0]) y_list.append(y-core[1]) # 计算距离 x = np.array(x_list) y = np.array(y_list) r = np.hypot(x,y) # 按照距离排序 sort_mask = np.argsort(r) x = x[sort_mask] y = y[sort_mask] r = r[sort_mask] # 计算角度 theta = np.arctan(y/x) theta[x<0] += np.pi # 确定顺序(CW-顺时针,CCW-逆时针) d = np.diff(theta) print(d) ccw = d[d>0].size > d[d<0].size print('ccw=',ccw) # 调整角度为升序(CCW)或降序(CW) if ccw: for i in range(1, theta.size): while theta[i] < theta[i-1]: theta[i] += 2*np.pi dtheta = theta[i] - theta[i-1] while r[i]/r[i-1] > 1.8*np.exp(dtheta/np.tan(fixed_ccw)): theta[i] += 2*np.pi dtheta = theta[i] - theta[i-1] else: for i in range(theta.size-1)[::-1]: while theta[i] < theta[i+1]: theta[i] += 2*np.pi dtheta = theta[i+1] - theta[i] while r[i+1]/r[i] > 1.8*np.exp(dtheta/np.tan(fixed_cw)): theta[i] += 2*np.pi dtheta = theta[i+1] - theta[i] # 定义拟合函数 def fmax(theta, fixed, phase): fixed = np.radians(90 + fixed) return fixed*np.exp((theta+phase*2*np.pi)/np.tan(fixed)) try: fita, fitb = optimize.curve_fit(fmax, theta, r, [2-int(ccw), 0], maxfev=10000) return fita except: return None core = (530, 496) dots = [(467,538), (448,675), (522,484), (513,451), (811,519)] result = fit_spiral(core, dots) if isinstance(result, np.ndarray): plotSpiral(core, result[0], phase=result[1], circle=4) else: print(u'拟合失败')
拟合效果如下图:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 明达年度发烧碟MasterSuperiorAudiophile2021[DSF]
- 英文DJ 《致命的温柔》24K德国HD金碟DTS 2CD[WAV+分轨][1.7G]
- 张学友1997《不老的传说》宝丽金首版 [WAV+CUE][971M]
- 张韶涵2024 《不负韶华》开盘母带[低速原抓WAV+CUE][1.1G]
- lol全球总决赛lcs三号种子是谁 S14全球总决赛lcs三号种子队伍介绍
- lol全球总决赛lck三号种子是谁 S14全球总决赛lck三号种子队伍
- 群星.2005-三里屯音乐之男孩女孩的情人节【太合麦田】【WAV+CUE】
- 崔健.2005-给你一点颜色【东西音乐】【WAV+CUE】
- 南台湾小姑娘.1998-心爱,等一下【大旗】【WAV+CUE】
- 【新世纪】群星-美丽人生(CestLaVie)(6CD)[WAV+CUE]
- ProteanQuartet-Tempusomniavincit(2024)[24-WAV]
- SirEdwardElgarconductsElgar[FLAC+CUE]
- 田震《20世纪中华歌坛名人百集珍藏版》[WAV+CUE][1G]
- BEYOND《大地》24K金蝶限量编号[低速原抓WAV+CUE][986M]
- 陈奕迅《准备中 SACD》[日本限量版] [WAV+CUE][1.2G]