将正弦波打印到控制台

昆腾

我正在研究将正弦波打印到控制台的Java程序。到目前为止,这是我写的:

int num = 7;
for (double y = 2; y >= 0; y-=0.2) {
  for (double x = 0; x <= num; x+=0.2) {
    if ( ((0.1+x) >= Math.asin((double)y-1)) && (((double)x-0.1) <= Math.asin((double)y-1)) )
      System.out.print('*');
    else
      System.out.print(' ');
  }
  System.out.println();
}

本质上,此程序将每行上的每个字符视为坐标平面上的0.2 x 0.2区域。如果正弦函数越过该区域,则会在屏幕上打印一个星号。否则,将打印一个空格。运行时,将其打印到控制台:

        *                          
     *                             
   *                               
  *                                
 *                                 
*                                  

谁能告诉我为什么我的程序在打印第一波后就停止了吗?

格特曼

它仅打印正弦波的前四分之一的原因是由于指定的范围Math.asin

返回值的反正弦值;返回的角度在-pi / 2至pi / 2的范围内。

一旦您x过去Math.PI / 2,该if语句的条件将始终为false

您可以利用以下事实

sin(π- x)= sin(x

sin(2π- x)= -sin(x

通过包括更多条件。double为清楚起见,我也删除了不必要的强制类型转换。)

if ( (0.1+x >= Math.asin(y-1)) && (x-0.1 <= Math.asin(y-1)) ||
     (0.1+x >= Math.PI - Math.asin(y-1)) && (x-0.1 <= Math.PI - Math.asin(y-1))
     (2*Math.PI -(0.1 + x) <= -Math.asin(y-1)) && (2*Math.PI -(x-0.1) >= -Math.asin(y-1))  )

输出:

        *                          
     *     *                       
   *        *                      
  *           *                  * 
 *             *                *  
*               *              *   
                 *            *    
                  *          *     
                   *        *      
                    *      *       
                        *          

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章