鱼C论坛

 找回密码
 立即注册
查看: 3843|回复: 9

[已解决]求一个画圆,和正弦余弦的代码

[复制链接]
发表于 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)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-6 02:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表