【编程】余 弦 曲 线

1.问题描述

在屏幕上画出余弦函数cos(x)曲线,如图1.6所示。

2.问题分析

连续的曲线是由点组成的,点与点之间距离比较近,看上去就是曲线了,画图的关键是画出每个点。Java提供了三角函数方法,直接调用cos()方法就可以根据x坐标计算出y坐标。需要注意的是,cos()方法输入的参数是弧度值,要进行坐标转换,同样,得到的结果也要进行转换处理。从图1.6中可以看出,这条余弦曲线有两个周期,我们可以把x坐标控制在0~720。

(1)确定程序框架

从图1.6中,我们可以发现,整个图形包括x轴、y轴及余弦曲线。控制台不方便输出图形,这里以Applet形式输出。这样我们就可以写出程序框架了,代码如下:

public class Cos1 extends  Applet 
{
	int x,y;
	public void start()			//当一个Applet被系统调用时,系统会自动调用									  start()方法
	{
	Graphics g=getGraphics();	//画画之前,必须先取得画笔
	//画x轴
	//画y轴
	//画cos(x)曲线
	}
}

(2)画x轴

为了画出图1.6所示效果,我们可以把坐标原点设定为(360,200),x轴就是从左到右的很多点组成,通过循环语句很容易实现,代码如下:

for(x=0;x<=750;x+=1)
{
	g.drawString("·",x,200);			//画x轴
}

细心的读者会发现,x轴上还有个箭头,这个是如何实现的呢,其实很简单,是由两条线段交汇而成。为方便起见,两条线段都与x轴成45°角,很容易得到表达式的方程:y=x–550,y=950–x。代码如下:

for(x=740;x<=750;x+=1)
{
	g.drawString("·",x,x-550); 	//x轴上方斜线
	g.drawString("·",x,950-x); 	//x轴下方斜线
}

(3)画y轴

参考上面x轴的绘制,很容易画出y轴,代码如下:

//y轴
for(y=0;x<=385;y+=1)
{
	g.drawString("·",360,y);		//画y轴
}
//y轴箭头
for(x=360;x<=370;x+=1)
{
	g.drawString("·",x-10,375-x);
	g.drawString("·",x,x-355);
}

(4)画cox(x)曲线

图形的主体是cox(x)曲线,从图1.6中可以看出,这条余弦曲线有两个周期,我们可以把x坐标控制在0~720。cox(x)返回的结果小于1,为了看到图1.6效果,必须进行放大处理,这里放大了80倍,同时把图形向下平移了200个像素。代码如下:

//两个周期,即4Л
for(x=0;x<=720;x+=1)
{
	a=Math.cos(x*Math. PI/180);
	y=(int)(200+80*a); 			//放大80倍并向下平移200个像素
	g.drawString("·",x,y);

(5)完整程序

现在我们就需要把刚才的程序进行组合,构成我们的完整程序:

import java.applet.*;
import java.awt.*;

public class Cos1  extends Applet 
{
	int x,y;
	
	public void start() 
	{
		//画画之前,必须先取得画笔
		Graphics g=getGraphics();
         //画x轴、y轴
		for(x=0;x<=750;x+=1)
		{
			g.drawString("·",x,200);
			if(x<=385) g.drawString("·",360,x);
		}
		g.drawString("Y",330,20);
         //画y轴箭头
		for(x=360;x<=370;x+=1)
		{
			g.drawString("·",x-10,375-x);
			g.drawString("·",x,x-355);
		}
         //画x轴箭头
		g.drawString("X",735,230);
		for(x=740;x<=750;x+=1)
		{
			g.drawString("·",x,x-550);
			g.drawString("·",x,950-x);
		}
         //画cox()曲线
		for(x=0;x<=720;x+=1)
		{
			double a=Math.cos(x*Math. PI/180+Math.PI);
			y=(int)(200+80*a);				//放大80倍并向下平移200个像素
			g.drawString("·",x,y);
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值