我用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 , #
看起来它本身就引起了共鸣。
答案 0 :(得分:1)
为了考虑符号数,amplitudeHeight的值应为2.5。你在波幅从0..20开始并且采用mod 5时剪切波。