大家好啊,我是普普通通有点憨憨的小秦呀,已经更新了一段时间公众号了呀,自己写的程序分享了一些些,但是有小伙伴常常对这样一串代码感到不解。
from jzh import hdz2dfm as h2d,dfm2hdz as d2h
或者时常可以看到:
angle = '120°0′0″' # 或是angle = '120,0,0,'
angle_h = d2h(angle)
那么这样的操作究竟是要达到什么目的捏?
答案当然也很直白:
hdz2dfm——弧度制to(two)度分秒
dfm2hdz——度分秒to弧度制
我们在用程序进行计算时,cos、sin、tan等三角函数运算使用数值必须为弧度制,那么我们在进行大量角度计算时就需要先将度分秒的形式转为弧度制。
下面小秦就简单介绍介绍小秦的jzh(角转换)函数模块
1.使用模块介绍
import math
import re
math库是我们常用的科学计算库,这里我们会用到math库中的三角函数运算函数,同时可以将十进制的角度转为弧度制。
re库主要用于拆解我们输入的角度(字符串),这里我们就会用到正则表达式来确定选取我们想要的字符。
2. 度分秒和弧度制的相互转换
度分秒转弧度制代码如下:
def dfm2hdz(dfm):
# 度分秒转换为弧度制
dfm_list = re.split('[,°′″\'"]', dfm)
sjz = abs(float(dfm_list[0])) + float(dfm_list[1]) / 60 + float(dfm_list[2]) / 3600
if float(re.split('[,°′″\'"]', dfm)[0]) >= 0:
hdz = math.radians(float(sjz))
else:
hdz = -math.radians(float(sjz))
return hdz
首先我们需要将录入的角度按度分秒拆分为三部分,
dfm_list = re.split('[,°′″\'"]', dfm) 意为识别到[,°′″\'"]几种符号时分割文本
dfm = '30°30′30″' # 或 '30,0,0,'
print(re.split('[,°′″\'"]', dfm))
我们此处可获取列表[30,30,30],而后对于度分秒的操作就变成了对列表的操作。
math.radians() 函数能够将十进制的角度数值转为弧度制,所以如果我们想要把度分秒转为弧度制就需要先过渡为十进制。
我们都知道: 1° = 60′= 3600″
以30°30′30″为例,若想转为十进制算法为
30° + 30′/60 + 30″/3600
我们都知道: 1° = 60′= 3600″
以30°30′30″为例,若想转为十进制算法为
30° + 30′/60 + 30″/3600
而后我们只要用radians()就可获取弧度。
注: 我们还要注意角度的正负。
弧度制转度分秒:
def hdz2dfm(hdz):
sjz = math.degrees(abs(hdz))
secs = sjz * 3600
sec_parts = math.modf(secs)
sec_dec = sec_parts[0]
sec_int = sec_parts[1]
m = round(sec_int % 60 + sec_dec,2) # 秒小数点后两位
fens = sec_int // 60
f = int(fens % 60)
d = int(fens // 60)
if hdz >= 0:
dfm = str(str(d) + '°' + str(f) + "′" + str(m) + '″')
else:
dfm = str(str(-d) + '°' + str(f) + "′" + str(m) + '″')
return dfm
弧度制转度分秒为之前运算的逆运算,与之前相似的是我们依旧需要将十进制作为过渡。
math.degree()能够读取弧度制并转为十进制的角度,我们需要注意的是degree()中接收的弧度得为正数否则在计算时会发生错误,我们可以通过if-else判断正负在最后返回数值时让角度字符串带上相应的符号。
弧度制转度分秒为之前运算的逆运算,与之前相似的是我们依旧需要将十进制作为过渡。
math.degree()能够读取弧度制并转为十进制的角度,我们需要注意的是degree()中接收的弧度得为正数否则在计算时会发生错误,我们可以通过if-else判断正负在最后返回数值时让角度字符串带上相应的符号。
计算机计算角度直接使用弧度能够很好的避免手算时弧度转秒的常数ρ的使用能够大大节约计算过程,这也意味着我们常用的转换主要是弧度制和度分秒的转换。
这里小秦主要介绍弧度制和度分秒的转换,如果大家对其他形式的转换感兴趣可以查看小秦上一篇文章分享的源码。
也可以在公众号中输入关键词"jzh"获取。
欢迎关注,一起进步(。・∀・)ノ