第五章:数学运算-math:数学函数-三角函数

5.4.10 三角函数
三角函数将三角形中的角与其边长相关联。在有周期性质的公式中经常出现三角函数如谐波或圆周运动,在处理角时也会经常用到三角函数。标准库中所有三角函数的角参数都被表示为弧度。
给定一个直角三角形中的角,其正弦是对边长度与斜边长度之比(sinA=对边/斜边)。余弦是邻边长度与斜边长度之比(cosA=邻边/斜边)。正切对边与邻边之比(tanA=对边/邻边)。

import math

print('{:^7} {:^7} {:^7} {:^7} {:^7}'.format(
    'Degrees','Radians','Sine','Cosine','Tangent'
    ))
print('{:-^7} {:-^7} {:-^7} {:-^7} {:-^7}'.format(
    '-','-','-','-','-',
    ))

fmt = '{:7.2f} {:7.2f} {:7.2f} {:7.2f} {:7.2f}'

for deg in range(0,361,30):
    rad = math.radians(deg)
    if deg in (90,270):
        t = float('inf')
    else:
        t = math.tan(rad)
    print(fmt.format(deg,rad,math.sin(rad),math.cos(rad),t))

正切也可以被定义为角的正弦值预期余弦值之比,因为弧度π/2和3π/2的余弦是0,所以相应的正切值为无穷大。
运行结果:
在这里插入图片描述
给定一个点(x,y),点[{0,0},(x,0),(x,y)]构成三角形中斜边长度未(x2 + y2)** 1/2,可以用hypot()来计算。

import math

print('{:^7} {:^7} {:^10}'.format('X','Y','Hypotenuse'))
print('{:-^7} {:-^7} {:-^10}'.format('','',''))

POINTS = [
    (1,1),
    (-1,-1),
    (math.sqrt(2),math.sqrt(2)),
    (3,4), # 3-4-5 triangle
    # On the circle
    (math.sqrt(2) / 2 ,math.sqrt(2) / 2), # pi/4 rads
    (0.5,math.sqrt(3) / 2), # pi/3 rads
    ]

for x,y in POINTS:
    h = math.hypot(x,y)
    print('{:7.2f} {:7.2f} {:7.2f}'.format(x,y,h))

对于圆上的点,其斜边总是等于1。
运行结果:
在这里插入图片描述
还可以用这个函数查看两个点之间的距离。

import math

print('{:^8} {:^8} {:^8} {:^8} {:^8}'.format(
    'X1','Y1','X2','Y2','Distance',
    ))
print('{:-^8} {:-^8} {:-^8} {:-^8} {:-^8}'.format(
    '','','','','',
    ))

POINTS = [
    ((5,5),(6,6)),
    ((-6,-6),(-5,-5)),
    ((0,0),(3,4)),  # 3-4-5 triangle
    ((-1,-1),(2,3)),  # 3-4-5 triangle
    ]

for (x1,y1),(x2,y2) in POINTS:
    x = x1 - x2
    y = y1 - y2
    h = math.hypot(x,y)
    print('{:8.2f} {:8.2f} {:8.2f} {:8.2f} {:8.2f}'.format(
        x1,y1,x2,y2,h,
        ))

使用x值之差和y值之差将一个端点移至原点,然后将结果传入hypot()。
运行结果:
在这里插入图片描述
math还定义了反三角函数。

import math

for r in [0,0.5,1]:
    print('arcsine({:1f})    = {:5.2f}'.format(r,math.asin(r)))
    print('arccosine({:1f})  = {:5.2f}'.format(r,math.acos(r)))
    print('arctangent({:1f}) = {:5.2f}'.format(r,math.atan(r)))
    print()

1.57大约等于π/2,或90度,这个角的正弦为1,余弦为0。
运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值