黑马程序员技术交流社区
标题:
用"*"在控制台,打印cos和sin的曲线
[打印本页]
作者:
Mr.zhao
时间:
2015-12-10 18:16
标题:
用"*"在控制台,打印cos和sin的曲线
题目:
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("*");
}
}
}
复制代码
顺便问问,同时画出正弦和余弦该怎么搞?
脑子不够用了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2