很多學習程式設計的都多多少少學習了一些數學知識。
前篇我們講講那些常用的數學處理函數, 我們接着過一過三角函數!
數學三角函數
除了前篇說的數的取值,指數對數等,還有我們國中數學的一些函數。如下:
正弦,餘弦,正切
反正弦,反餘弦,反正切
等等的,下面會使用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度
下面是運作效果:

可以看到每個輸出都跟我們實際數學學習到的公式結果一直(有些值隻是稍微接近)。
注意! 但是tan(9 0 ∘ 90^\circ90
)居然被算出來了!
數學課本都說tan(9 0 ∘ 90^\circ90
)毫無意義!
這裡我們也看到上面的三角函數都接受弧度值,這類值在計算機中隻能表現為一個不斷逼近的數字,是以盡管我們通過radians函數把90翻譯為弧度了,但這個值不是絕對的90度。不會出現無意義的結果!
題外話:關于exec函數,請檢視前篇文章說明。