使用数学,Python的数学函数标准模块,你可以计算三角函数(sin、cos、tan)和反三角函数(arcsin、arccos、arctan)。
在此对以下内容进行解释,并附有示例代码。
- Pi (3.1415926.):
math.pi
- 角度转换(弧度、度)。:
math.degrees()
,math.radians()
- 正弦,反正弦:
math.sin()
,math.asin()
- 余弦,反余弦:
math.cos()
,math.acos()
- 正切,反切:
math.tan()
,math.atan()
,math.atan2()
- 下面的差异:
math.atan()
,math.atan2()
Pi (3.1415926.): math.pi
在数学模块中,Pi是作为一个常数提供的。它的表达方式如下。math.pi
import math
print(math.pi)
# 3.141592653589793
角度转换(弧度、度)。: math.degrees(), math.radians()
数学模块中的三角和反三角函数使用弧度作为角度的单位。
使用math.degrees()和math.radians()在弧度(弧度法)和度数(度数法)之间转换。
Math.degree()将弧度转换为度数,而math.radians()将度数转换为弧度。
print(math.degrees(math.pi))
# 180.0
print(math.radians(180))
# 3.141592653589793
正弦,反正弦: math.sin(), math.asin()
求正弦(sin)的函数是math.sin(),求反正弦(arcsin)的函数是math.asin()。
下面是一个寻找30度正弦的例子,使用math.radians()将度数转换成弧度。
sin30 = math.sin(math.radians(30))
print(sin30)
# 0.49999999999999994
30度的正弦是0.5,但有一个误差,因为π是一个无理数,无法准确计算。
如果你想四舍五入到适当的位数,请使用round()函数或 format()方法或 format()函数。
请注意,round()的返回值是一个数字(int或float),但format()的返回值是一个字符串。如果你想在后续计算中使用它,请使用round()。
print(round(sin30, 3))
print(type(round(sin30, 3)))
# 0.5
# <class 'float'>
print('{:.3}'.format(sin30))
print(type('{:.3}'.format(sin30)))
# 0.5
# <class 'str'>
print(format(sin30, '.3'))
print(type(format(sin30, '.3')))
# 0.5
# <class 'str'>
round()函数将小数点后的数字作为其第二个参数。请注意,这不是严格意义上的四舍五入。详见以下文章。
format()方法和format()函数指定了格式化规范字符串中的小数位数。详见以下文章。
如果你想比较,你也可以使用math.isclose()。
print(math.isclose(sin30, 0.5))
# True
同样,这里有一个寻找0.5的反正弦的例子。math.asin()返回弧度,用math.degree()转换为度。
asin05 = math.degrees(math.asin(0.5))
print(asin05)
# 29.999999999999996
print(round(asin05, 3))
# 30.0
余弦,反余弦: math.cos(), math.acos()
求余弦(cos)的函数是math.cos(),求反余弦(弧形余弦,arccos)的函数是math.acos()。
下面是一个寻找60度的余弦和0.5的反余弦的例子。
print(math.cos(math.radians(60)))
# 0.5000000000000001
print(math.degrees(math.acos(0.5)))
# 59.99999999999999
如果你希望四舍五入到合适的数字,你可以像正弦一样使用round()或format()。
正切,反切: math.tan(), math.atan(), math.atan2()
求正切(tan)的函数是math.tan(),而求反切(arctan)的函数是math.atan()或math.atan2()。
Math.atan2()将在后面介绍。
下面是一个寻找45度正切和1度反切的例子。
print(math.tan(math.radians(45)))
# 0.9999999999999999
print(math.degrees(math.atan(1)))
# 45.0
math.atan()和math.atan2()的区别
math.atan()和math.atan2()都是返回反正切的函数,但它们在参数数量和返回值范围上有所不同。
math.atan(x)有一个参数,返回弧度的arctan(x)。返回值将在-pi\2和pi\2之间(-90到90度)。
print(math.degrees(math.atan(0)))
# 0.0
print(math.degrees(math.atan(1)))
# 45.0
print(math.degrees(math.atan(-1)))
# -45.0
print(math.degrees(math.atan(math.inf)))
# 90.0
print(math.degrees(math.atan(-math.inf)))
# -90.0
在上面的例子中,math.inf代表无穷大。
math.atan2(y, x)有两个参数,返回弧度的arctan(y\x)。这个角度是原点到坐标(x,y)的矢量与极坐标平面中x轴的正方向所成的角度(偏角),返回值在-pi和pi之间(-180到180度)。
由于第二和第三象限的角度也可以正确得到,所以在考虑极坐标平面时,math.atan2()比math.atan()更合适。
注意,参数的顺序是y,x,而不是x,y。
print(math.degrees(math.atan2(0, 1)))
# 0.0
print(math.degrees(math.atan2(1, 1)))
# 45.0
print(math.degrees(math.atan2(1, 0)))
# 90.0
print(math.degrees(math.atan2(1, -1)))
# 135.0
print(math.degrees(math.atan2(0, -1)))
# 180.0
print(math.degrees(math.atan2(-1, -1)))
# -135.0
print(math.degrees(math.atan2(-1, 0)))
# -90.0
print(math.degrees(math.atan2(-1, 1)))
# -45.0
如上面的例子,x轴的负方向(y为零,x为负)是pi(180度),但当y为负零时,它是-pi(-180度)。如果你想严格处理符号,请注意。
print(math.degrees(math.atan2(-0.0, -1)))
# -180.0
负零是以下操作的结果
print(-1 / math.inf)
# -0.0
print(-1.0 * 0.0)
# -0.0
整数不作为负零处理。
print(-0.0)
# -0.0
print(-0)
# 0
即使x和y都是零,结果也取决于符号。
print(math.degrees(math.atan2(0.0, 0.0)))
# 0.0
print(math.degrees(math.atan2(-0.0, 0.0)))
# -0.0
print(math.degrees(math.atan2(-0.0, -0.0)))
# -180.0
print(math.degrees(math.atan2(0.0, -0.0)))
# 180.0
还有一些例子,结果的符号会根据负零而改变,如math.atan2()以及math.sin()、math.asin()、math.tan()和math.atan()。
print(math.sin(0.0))
# 0.0
print(math.sin(-0.0))
# -0.0
print(math.asin(0.0))
# 0.0
print(math.asin(-0.0))
# -0.0
print(math.tan(0.0))
# 0.0
print(math.tan(-0.0))
# -0.0
print(math.atan(0.0))
# 0.0
print(math.atan(-0.0))
# -0.0
print(math.atan2(0.0, 1.0))
# 0.0
print(math.atan2(-0.0, 1.0))
# -0.0
注意,到目前为止的例子是在CPython中运行程序的结果。请注意,其他实现或环境可能会以不同方式处理负零。