题目:
1、在屏幕上用"*"显示0-360度的余弦cos(x)曲线;
2、在屏幕上用"*"显示0-360度的余弦sin(x)曲线;
作为一个初学者的体会,这两道题看似简单,但是自己做起来还是挺有难度的,因为不知道有没有其他高级的方法,过程中只能靠着用反函数的提示自己做,期间也画出了各种莫名其妙的图案。过程比较痛苦但是做出来之后想想也没有那么困难。尤其是画正弦的时候怎么画看着都不流畅,说多了都是泪。总之,大家也可以说说有没有更简单的方法。
- /*
- 1、在屏幕上用"*"显示0-360度的余弦cos(x)曲线;
- */
- //分析:
- //cos关于x=π对称
- //在控制台打印是一行一行打印的从上往下打印,所以我们不能直接用x坐标控制打印顺序
- //这里要沿着y坐标往下打印,所以要用到arccos(y)反余弦范围[-1,1]
- //把坐标大小放大10倍,即-10 <= y && y <= 10;0 < x && x < 62(角度转化为弧度乘以10取整而来)
- //在打印第一个"*"之前需要打印n < arccos(y/10) 个" ",不需要换行,
- //在打印第二个"*"之前还要打印n < 62 - arccos(y/10)个" ";
- //打印余弦
- class PrintCos {
- public static void main(String[] args) {
- //关于x=31对称
- for(int y = 10; y >= -10; y--) {
- int x =1;
- //注意在带入反余弦的时候y需要除以10.转化为正常弧度
- int value = (int)(Math.acos((double)y/10) * 10);
- for( ; x < value; x++) {
- //打印之前的" ",不需要换行
- System.out.print(" ");
- }
- //第一个点,不需要换行,因为还有对称的点
- System.out.print("*");
- //打印对称
- for( ;x < 62 - value; x++) {
- System.out.print(" ");
- }
- //打印第二个"*",并且换行
- System.out.println("*");
- }
- }
- }
复制代码
- /*
- 2、在屏幕上用"*"显示0-360度的余弦sin(x)曲线;
- */
- //分析:
- //同理这道题,sin它是关于x = π中心对称的
- //我们也用反余弦函数做arcsin(y),并把坐标放大10倍
- //先打印0 < y && y < 10,arcsin(y/10)的图形,
- //但是他又是关于x = π/2对称的,这里,我们把x放大10倍,即关于x = 16对称
- //先打印y为负数的部分,把得到的图形取反,再关于x = π/2对称
- //再向右移动即可以拼接得到
- class PrintSin {
- public static void main(String[] args) {
- //从上往下打印sin的正数部分
- for(int y = 10; y > 0; y--) {
- int x = 1;
- int value = (int)(Math.asin((double)y/10)*10);
- //打印sin前π/2的空格
- for(; x < value; x++) {
- System.out.print(" ");
- }
- //打印第一个点
- System.out.print("*");
- for(; x < 31 - value; x++) {
- System.out.print(" ");
- }
- //打印第二个点,并换行
- System.out.println("*");
- }
- //中心对称;先打印y为负数的部分,把得到的图形取反,再关于x = π/2对称,
- //然后向右移动,即多打印32个" "
- for(int y = 0; y >= -10; y--) {
- int x = 1;
- int value = -(int)(Math.asin((double)y/10)*10);
- //比0-31要多打印32个空格
- for(; x < value + 32; x++) {
- System.out.print(" ");
- }
- //打印第一个点
- System.out.print("*");
- for(; x < 62 - value; x++) {
- System.out.print(" ");
- }
- //打印第二个点,并换行
- System.out.println("*");
- }
-
- }
- }
复制代码
顺便问问,同时画出正弦和余弦该怎么搞?脑子不够用了 |
|