java在控制台打印余弦曲线_控制台绘制正弦/余弦曲线

本文介绍了如何使用C++在控制台打印余弦和正弦曲线,通过调整缩放系数和利用对称性,分别实现了正弦曲线和余弦曲线的绘制,对于正弦曲线,特别处理了左右对称的情况。
摘要由CSDN通过智能技术生成

余弦曲线

当然了,这里我们不用数组……否则就没技术含量了。

正弦曲线的特点是左右对称,且左边部分的纵坐标是从1一直降到-1的,相应的右边的纵坐标是从-1一直递增到1。难点在于显示器只能按行输出,也就是说输出了一行后不能再掉头输出上一行的信息。

我们自定义一个缩放系数a为10,用acos(-1)*10可以算得等于31,因此总宽度为62,起点的横坐标为0,终点的横坐标为61。因为余弦曲线对称,所以在0~180度,也就是左边部分时,横坐标为k时对应的相同纵坐标的180~360度,也就是右边部分的横坐标为(62-k)。

#include

#include

int main()

{

double y;

int x,k;

for(y=1;y>=-1;y-=0.1)

{

k=acos(y)*10;

for(x=1;x

printf(" ");

printf("*");

for(;x<62-k;x++)

printf(" ");

printf("*\n");

}

return 0;

}

e0f6ba0ef65f9ff5807dfbc2f7675f95.png

正弦曲线

正弦曲线就要难得多了……我们依旧沿用余弦曲线示例中的总宽度(62)。

相信对于左边部分大家都可以信手拈来……

if(1<=k&&k<=15)

{

for(x=1;x

printf(" ");

printf("*");

for(;x<30-k;x++)

printf(" ");

printf("*\n");

}

右边部分我也弄了好久,主要是忽略了asin(-1)*10是负数……哎

所以发现了这一点之后就应该将if语句这样写:

if(-15<=k&&k<=-1)

但是还有一点要注意的,我们不是在用数组打印星号,换句话说,对于横坐标而言,打印都得从1开始,而我们的坐标成了负值,该怎么办呢?

我们应该转换它:将负数k变成(31-k)它就成了一个合理的正数了,同样的,在270度的左右90之间也是对称的。而270度对应的宽度为46,那么180~270度之间的k对称到270~360度之间的多少呢?设一个方程就搞定了:

46-(31- k)= x - 46

=>x = 61 + k

于是乎:

#include

#include

int main()

{

double y;

int x,k;

for(y=1;y>=-1;y-=0.1)

{

k=asin(y)*10;

if(1<=k&&k<=15)

{

for(x=1;x

printf(" ");

printf("*");

for(;x<30-k;x++)

printf(" ");

printf("*\n");

}

else if(-15<=k&&k<=-1)

{

for(x=1;x<31-k;x++)

printf(" ");

printf("*");

for(x;x<61+k;x++)

printf(" ");

printf("*\n");

}

}

return 0;

}

d57f92fa556cdcca418d8bd2af3bf7ae.png

源码

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值