3D ASCII正弦波发生器产生奇怪的正弦波

时间:2017-04-12 09:00:46

标签: c math 3d sin

我用C / C ++编写了一个3D正弦波发生器

代码:

#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;
}

您需要使用 gcc source.c -std = c99 g ++ source.c

进行编译

我期待平滑的3D正弦波作为输出

我的问题是公式

中的某个地方
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 , , .

我想要实现的结果是平滑的3D正弦波,但我没有在代码中看到错误。

编辑: 如果我把时间段设置为 0.5 我似乎有一点错误:

# # , 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 个答案:

答案 0 :(得分:1)

为了考虑符号数,amplitudeHeight的值应为2.5。你在波幅从0..20开始并且采用mod 5时剪切波。