我正在研究将正弦波打印到控制台的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] 删除。
我来说两句