功能描述
- 运行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