在前面两天的博客中,我们学会了如何用C语言分别绘制sin(x)和cos(x)在0°~360°的曲线。
今天我们来试试将两条曲线同时绘制出来。
要求:
在屏幕上显示0°~360°的cos(x)曲线与sin(x)曲线的叠加图形。其中cos(x)图形用“*”表示,sin(x)图形用“+”表示,在两个图形的交点处则用“*”表示。
问题分析与算法设计:
图形叠加的关键是要在分别计算出同一行中两个图形的列方向点坐标后,正确判断相互的位置关系。为此,可以预先判定图形的交点,在分别控制打印两个不同的图形。
具体程序:
#include <stdio.h>
#include <math.h>
#define PAI 3.141592
int main()
{ //定义变量
int a,b,x;
double y,n;
//打印x轴上半部分
for(y = 1; y >= 0; y -= 0.1)
{
a = acos(y)*10;
b = asin(y)*10;
for(x = 0; x <= 62; x++)
{
if(x <= 31)
if((x == a && x == b) || (x == a && x == (31-b))) printf("+");
else if(x == a) printf("*");
else if(x == b || x == (31-b)) printf("+");
else printf(" ");
else if((x == (62-a) && x == b) || (x == (62-a) && x == (94-b))) printf("+");
else if(x == (62-a)) printf("*");
else if(x == b || x == (94-b)) printf("+");
else printf(" ");
}
printf("\n");
}
//打印x轴下半部分
for( ; y >= -1; y -= 0.1)
{
a = acos(y)*10;
n = asin(-y);
b = (PAI + n)*10;
for(x = 0; x <= 62; x++)
{
if(x <= 31)
if((x == a && x == b) || (x == a && x == (31-b))) printf("+");
else if(x == a) printf("*");
else if(x == b || x == (31-b)) printf("+");
else printf(" ");
else if((x == (62-a) && x == b) || (x == (62-a) && x == (94-b))) printf("+");
else if(x == (62-a)) printf("*");
else if(x == b || x == (94-b)) printf("+");
else printf(" ");
}
printf("\n");
}
return 0;
}
运行结果:
(为了方便大家读懂程序,这里附上两个图形的上点的相对位置关系,即:分情况讨论的分界点的取值。见下图)
今天就到这里啦,大家晚安