|
发表于 2023-7-21 12:20:30
|
显示全部楼层
# 定义一个函数,计算给定角度的正弦值
def sin(angle):
# 使用泰勒级数展开式近似计算正弦值
# sin(x) = x - x^3/3! + x^5/5! - x^7/7! + ...
# 为了提高精度,我们取前10项求和
result = 0
sign = 1 # 符号,正负交替
for n in range(1, 20, 2):
# 计算x^n
power = 1
for i in range(n):
power *= angle
# 计算n!
factorial = 1
for i in range(1, n+1):
factorial *= i
# 累加结果
result += sign * power / factorial
# 改变符号
sign *= -1
return result
# 定义一个函数,计算给定角度的余弦值
def cos(angle):
# 使用泰勒级数展开式近似计算余弦值
# cos(x) = 1 - x^2/2! + x^4/4! - x^6/6! + ...
# 为了提高精度,我们取前10项求和
result = 0
sign = 1 # 符号,正负交替
for n in range(0, 20, 2):
# 计算x^n
power = 1
for i in range(n):
power *= angle
# 计算n!
factorial = 1
for i in range(1, n+1):
factorial *= i
# 累加结果
result += sign * power / factorial
# 改变符号
sign *= -1
return result
# 定义一个函数,画出一个圆形图案
def draw_circle(radius):
# 使用极坐标方程画圆,即x = r*cos(theta), y = r*sin(theta)
# 其中r是半径,theta是角度(弧度制)
# 我们从0到2*pi,每隔0.01弧度取一个点,然后用*号表示在屏幕上
for theta in range(0, 628): # 628约等于2*pi*100,因为我们要乘以100转换为整数
theta /= 100 # 转换回弧度制
x = radius * cos(theta) # 计算x坐标
y = radius * sin(theta) # 计算y坐标
print("*" * int(x + radius), end="") # 打印*号,注意要加上半径偏移量,因为屏幕左上角是原点
print() # 换行
# 定义一个函数,画出正弦和余弦曲线图案
def draw_sine_cosine(period, amplitude):
# 使用直角坐标方程画正弦和余弦曲线,即y = a*sin(b*x), y = a*cos(b*x)
# 其中a是振幅,b是频率,x是横坐标,y是纵坐标
# 我们从0到period,每隔0.01单位取一个点,然后用*号表示在屏幕上
for x in range(0, int(period * 100)): # 因为我们要乘以100转换为整数
x /= 100 # 转换回原来的单位
y_sin = amplitude * sin(2 * 3.14 / period * x) # 计算正弦曲线的y坐标,注意要用弧度制转换角度
y_cos = amplitude * cos(2 * 3.14 / period * x) # 计算余弦曲线的y坐标,注意要用弧度制转换角度
print(" " * int(x * 10), end="") # 打印空格,注意要乘以10放大横坐标
print("*" * int(y_sin + amplitude), end="") # 打印*号,注意要加上振幅偏移量,因为屏幕左上角是原点
print("*" * int(y_cos + amplitude), end="") # 打印*号,注意要加上振幅偏移量,因为屏幕左上角是原点
print() # 换行
# 调用函数,画出一个半径为10的圆
draw_circle(10)
# 调用函数,画出一个周期为5,振幅为10的正弦和余弦曲线
draw_sine_cosine(5, 10)
|
|