当前位置: 首页 > 知识库问答 >
问题:

三维ASCII正弦波发生器产生奇异正弦波

吕森
2023-03-14

用C/C++编写了一个三维正弦波发生器

代码:

#include <stdio.h>
#include <math.h>
#include <unistd.h>

#define cursorForward(x) printf("\033[%dC", (x))
#define cursorBackward(x) printf("\033[%dD", (x))
#define cursorUp(x) printf("\033[%dA", (x))
#define cursorDown(x) printf("\033[%dB", (x))
#define clearScreen printf("\033[2J")
#define width 40
#define height 15
#define amplitudeHeight 10
#define period 0.1

char *values = " .,o#";
float time = 0;

int main()
{
    while(1) {
        for(int y = 0; y < heigth; y++) {
            for(int x = 0; x < width; x++) {
                printf("%c ", values[(int) (amplitudeHeight * (sin(period * sqrt((x - width / 2) * (x - width / 2) + (y - height/ 2) * (y - height/ 2)) + time) + 1)) % 5]);
            }
        printf("\n");
        }
        usleep(1000 * 100);
        time += 0.1;
        cursorBackward(width);
        cursorUp(heigth);
    }
    return 0;
}
amplitudeHeight * //controls the AmplitudeHeight
(sin(period * //controls the period width
sqrt((x - width / 2) * (x - width / 2) + //controls x position 
(y - height/ 2) * (y - height/ 2)) +  //controls the y position
time) + 1) //time
% 5 // i only have 5 representative chars
. . , , o # #   . , o # #   . . , , o o o o o , , . .   # # o , .   # # o , , .
. . , o o #   . , , o #   . . , o o o # # # o o o , . .   # o , , .   # o o , .
. , , o # #   . , o #     . , o o # #       # # o o , .     # o , .   # # o , ,
. , , o #     . , o #   . , o o #               # o o , .   # o , .     # o , ,
. , , o #   . , o # #   . , o #     . . . . .     # o , .   # # o , .   # o , ,
. , o o #   . , o #   . , o o #   . . , , , . .   # o o , .   # o , .   # o o ,
. , o o #   . , o #   . , o #     . , , o , , .     # o , .   # o , .   # o o ,
. , o o #   . , o #   . , o #     . , o o o , .     # o , .   # o , .   # o o ,
. , o o #   . , o #   . , o #     . , , o , , .     # o , .   # o , .   # o o ,
. , o o #   . , o #   . , o o #   . . , , , . .   # o o , .   # o , .   # o o ,
. , , o #   . , o # #   . , o #     . . . . .     # o , .   # # o , .   # o , ,
. , , o #     . , o #   . , o o #               # o o , .   # o , .     # o , ,
. , , o # #   . , o #     . , o o # #       # # o o , .     # o , .   # # o , ,
. . , o o #   . , , o #   . . , o o o # # # o o o , . .   # o , , .   # o o , .
. . , , o # #   . , o # #   . . , , o o o o o , , . .   # # o , .   # # o , , .
# # , o o # .     , .   o . o # # # o o , o o # # # o . o   . ,     . # o o , #
# o   . . ,     . # o o . o # # o .   # # #   . o # # o . o o # .     , . .   o
# o # #   .     o . .   o # # o   o . # # # . o   o # # o   . . o     .   # # o
# , o o # .   . # o o , # # o   , # .   #   . # ,   o # # , o o # .   . # o o ,
# . , , o     .     # o # # . o #   , . . . ,   # o . # # o #     .     o , , .
# . . . ,     , . .   o # o   . . ,           , . .   o # o   . . ,     , . . .
# . . . ,     , , , . # # o # #   .     .     .   # # o # # . , , ,     , . . .
#   . . ,     o , , . # # , # # # .   . # .   . # # # , # # . , , o     , . .
# . . . ,     , , , . # # o # #   .     .     .   # # o # # . , , ,     , . . .
# . . . ,     , . .   o # o   . . ,           , . .   o # o   . . ,     , . . .
# . , , o     .     # o # # . o #   , . . . ,   # o . # # o #     .     o , , .
# , o o # .   . # o o , # # o   , # .   #   . # ,   o # # , o o # .   . # o o ,
# o # #   .     o . .   o # # o   o . # # # . o   o # # o   . . o     .   # # o
# o   . . ,     . # o o . o # # o .   # # #   . o # # o . o o # .     , . .   o
# # , o o # .     , .   o . o # # # o o , o o # # # o . o   . ,     . # o o , #

共有1个答案

欧阳绪
2023-03-14

amplitudeHeight的值应为2.5,以说明符号的数量。你要剪裁振幅从0..20开始的波,然后取mod5。

 类似资料:
  • 我如何建立一个方程来产生扫频正弦波。我是信号处理新手,在网上找不到太多关于生成扫描正弦波的话题。请告诉我一些我可以用来生成方程式并在代码中使用的源代码。非常感谢。

  • 我试图生成一组点,当绘制成一个图表示1个周期的正弦波。要求是: 1个周期的正弦波 下限=29491 上限=36043 点数=100 振幅=3276 零偏移量=32767 代码: 我正在生成并存储一个文件中的点。当这些点被绘制出来时,我得到了下面的图。 但我只需要一个循环。我怎么能这么做?

  • 问题内容: 第一次海报在这里。我通常喜欢自己找到答案(通过研究或反复试验得出),但是我很困惑。 我要做什么: 我正在构建一个简单的android音频合成器。现在,我只是在实时播放正弦音,UI中的滑块会随着用户的调整而改变音的频率。 如何构建它: 基本上,我有两个线程- 工作线程和输出线程。每当调用其tick()方法时,工作线程就用正弦波数据填充一个缓冲区。一旦缓冲区被填满,它会警告输出线程数据已准

  • 问题内容: 在Java中以任何频率生成正弦波声音的最简单方法是什么?样本大小大于2个字节会有所帮助,但这并不 重要。 问题答案: 见一个自包含的例子。 也许更简单? 如链接答案顶部所示,这51行代码段(在下面重复-分隔为单行和行内注释)大约与 生成音调一样简单(好的,您可以取出5行以上用于谐波)。 人们似乎认为这应该是工具包中内置的一种产生 纯净音调的方法。并非如此,要花一点时间就可以做到。

  • 我试图在y有最高值时显示x位置。在if语句中,我试图将y值与120进行比较,但它似乎从来都不是真的,所以它没有使用文本函数显示我的x位置。我也试着取整y值,但结果仍然不是我想要的。有人能帮我吗?

  • 我正在做一个项目,我想通过组合不同的正弦波来产生(简单的)声音。我使用的是arduino mkrZero,因为它内置了I2S接口,似乎有足够的处理能力来满足我的需求。 教程代码工作得很好,我从扬声器中得到了一个简单的方波音调。 现在我修改了生成正弦波的代码,有一个sin函数的查找表,使其足够快: 如果我稍微修改一下代码,然后写 而不是 一切都破裂了,扬声器发出的声音听起来像是可怕的尖叫 //阻塞