天天看點

捋一捋Python中的數學運算math庫之三角函數代碼展示

很多學習程式設計的都多多少少學習了一些數學知識。

前篇我們講講那些常用的數學處理函數, 我們接着過一過三角函數!

數學三角函數

除了前篇說的數的取值,指數對數等,還有我們國中數學的一些函數。如下:

正弦,餘弦,正切

反正弦,反餘弦,反正切

等等的,下面會使用math.sin/ math.cos/ math.tan 等等來進行三角函數運算。

他們都有一個共同點,參數都是弧度制(而非角度制)。

而asin/acos/atan 這類接收數字,輸出的結果也并非角度,也是弧度值。

舉個例子之計算 30度正弦值

如下,我們都知道3 0 ∘ 30^\circ30

正弦值等于0.5,但是上面提到的函數都隻接受弧度的

sin ⁡ \sinsin(3 0 ∘ 30^\circ30

) = 1/2

也就是說:我們需要使用 30度 對應的弧度值,傳給sin函數,才能算出sin(30度)

至此,我們需要引入兩個重要的函數:

math.degrees(傳入參數為弧度值)# 比如math.degrees(math.PI) 結果為180(度)
math.radians(傳入參數為角度值)# 比如math.radians(180) 結果為PI
      
#角度轉弧度
rad =  math.radians(角度值) #或者把知道角度的弧度值給進來:比如30度
#計算sin 給進弧度值對應的某個角度
math.sin(rad)  # 結果為1/2
      

代碼展示

鑒于很多函數都需要接收一個産生或者是多個參數,學委把函數調用進行包裝。

編寫了exec函數,動态的列印執行了哪個函數,參數是啥。

如果你是小白,請簡單了解exec函數是一個幫你運作數學函數的工具即可,它的用法是:

exec(參數,被調用的數學函數)
或者
exec(參數清單,被調用的數學函數)
      
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/10/26 10:02 下午
# @Author : LeiXueWei
# @CSDN/Juejin/Wechat: 雷學委
# @XueWeiTag: CodingDemo
# @File : number_demo.py
# @Project : hello
# @Blog: https://blog.csdn.net/geeklevin/article/details/121024945

import math

#這個函數為了友善輸出展示,前篇文章有更多解釋,需要請檢視前篇。
def exec(obj, func, label=""):
    if type(obj) == list:
        print("%s : apply func %s on obj %s = %s" % (label,func, obj, func(*obj)))
    elif type(obj) == tuple:
        print("%s : apply func %s on obj %s = %s" % (label,func, obj, func(*obj)))
    else:
        #print("type of obj is %s " % type(obj))
        print("%s : apply func %s on obj %s = %s" % (label,func, obj, func(obj)))


exec(math.pi, math.degrees,"把角度轉換為弧度") # pi 弧度 為 180度
exec(180, math.radians,"把弧度換轉為角度") # 180度 為 1 pi 弧度
exec(math.pi/6, math.sin, "求sin(30度)") # sin(30度)= 1/2
exec(0.5, math.asin, "求asin(30度)") # asin(1/2) = 30度
print(math.degrees(math.asin(0.5))) # 30度
exec(math.pi/3, math.cos, "求cos(60度)") # cos(60度)= 1/2
exec(0.5, math.acos, "求acos(60度)") # acos(1/2) = 60度
print(math.degrees(math.acos(0.5))) # 60度
exec(0, math.tan, "求tan(0度)")
exec(0, math.atan, "求atan(0度)")
exec(math.pi/2, math.tan, "求tan(90度)") #tan (90度)沒有任何意義,但是在計算機中math.pi/2 弧度沒有辦法嚴格表示為90讀
print(math.tan(math.radians(45)))#tan(45度)= 1
print(math.tan(math.radians(90)))#tan (90度) 沒有任何意義
#print(math.radians(90))# 因為角度轉弧度并非精準表示的,計算機隻能算一個無限逼近的數字弧度值來表示90,是以上面的90可以計算的
exec(1, math.atan, "求atan(0度)")
print(math.degrees(math.atan(1))) # 45度


      

下面是運作效果:

捋一捋Python中的數學運算math庫之三角函數代碼展示

可以看到每個輸出都跟我們實際數學學習到的公式結果一直(有些值隻是稍微接近)。

注意! 但是tan(9 0 ∘ 90^\circ90

)居然被算出來了!

數學課本都說tan(9 0 ∘ 90^\circ90

)毫無意義!

這裡我們也看到上面的三角函數都接受弧度值,這類值在計算機中隻能表現為一個不斷逼近的數字,是以盡管我們通過radians函數把90翻譯為弧度了,但這個值不是絕對的90度。不會出現無意義的結果!

題外話:關于exec函數,請檢視前篇文章說明。