因为在终端里输出,只能往前,往下输出的特性,所以要移用对称性来实现输出正玄,余玄图案。
#include <stdio.h>
#include <math.h>
int main() {
double y;
int x, f, i;
/* 输出正玄, 单调区间 x: [-pi/2, pi/2], y: [-1, 1] */
/* 要分成两个部分来计算输出 */
for (y = 1; y > 0; y -= 0.1) {
x = asin(y) * 10;
for (i = 1; i < x; ++i) printf(" ");
printf("*");
for (; i < 32 - x; ++i) printf(" ");
printf("*\n");
}
for (y = 0; y >= -1; y -= 0.1) {
x = asin(y) * 10; /* x是负值 */
for (i = 1; i < 34 - x; ++i) printf(" ");
printf("*");
for (; i < 66 + x; ++i) printf(" ");
printf("*\n");
}
printf("\n\n");
/* 输出余玄, 单调区间 x: [0, pi], y: [1, -1] */
for (y = 1; y >= -1; y -= 0.1) {
x = (int)(acos(y) * 10);
for (i = 0; i <= 64; ++i) {
if (i == x || i == 64 - x) {
printf("*");
} else {
printf(" ");
}
}
printf("\n");
}
}