3D ASCII 正弦波发生器产生奇怪的正弦波
3D ASCII Sine wave generator generates weird sine waves
我在 C/C++
中编写了一个 3D 正弦波发生器
代码:
#include <stdio.h>
#include <math.h>
#include <unistd.h>
#define cursorForward(x) printf("3[%dC", (x))
#define cursorBackward(x) printf("3[%dD", (x))
#define cursorUp(x) printf("3[%dA", (x))
#define cursorDown(x) printf("3[%dB", (x))
#define clearScreen printf("3[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[= 编译它14=]
我希望输出平滑的 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 , #
这看起来像是在引起共鸣。
amplitudeHeight 的值应为 2.5 以考虑符号数。您正在剪切振幅从 0..20 开始的波并采用 mod 5.
我在 C/C++
中编写了一个 3D 正弦波发生器代码:
#include <stdio.h>
#include <math.h>
#include <unistd.h>
#define cursorForward(x) printf("3[%dC", (x))
#define cursorBackward(x) printf("3[%dD", (x))
#define cursorUp(x) printf("3[%dA", (x))
#define cursorDown(x) printf("3[%dB", (x))
#define clearScreen printf("3[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[= 编译它14=]
我希望输出平滑的 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 , #
这看起来像是在引起共鸣。
amplitudeHeight 的值应为 2.5 以考虑符号数。您正在剪切振幅从 0..20 开始的波并采用 mod 5.