功能描述

  • 运行shell程序后要求用户输入两个参数:振幅、频率
  • 根据振幅、频率在terminal窗口内,根据窗口大小使用字符进行sin波的绘制,超出窗口范围的不绘制
  • terminal窗口左上角显示用户输入的两个参数:振幅、频率

代码

#!/bin/bash

# 接收用户输入前清除屏幕
clear
# 接收振幅参数 接收频率参数 窗口左上角反馈用户输入的参数
read -rp "振幅:" amplitude
read -rp "频率:" frequence
# 获取终端窗口宽度 获取终端窗口高度
width=$(tput cols)
height=$(tput lines)
# 计算规避宽度
x1_width=$((${#amplitude} + 6))
x2_width=$((${#frequence} + 6))
if ((x1_width < x2_width)); then
    x1_width="$x2_width"
fi
# 计算PI值
pi=$(bc -l <<<"scale=10; 4*a(1)")
for ((col = 0; col < width; col++)); do
    # 计算Y坐标值
    row=$(printf "%.0f" "$(bc -l <<<"scale=10; $amplitude * s(((2*$frequence*$pi)/$width)*$col-$pi) + $amplitude")")
    # 判断字符星号的位置是否越界
    if ((row <= height - 2)) && (((row > 1) || (col > x1_width - 1))); then
        # 设置输出的坐标位置
        tput cup "$row" "$col"
        # 输出字符
        echo "*"
    fi
done
# 光标归位
tput cup "$height" 0