java 产生正弦波

深入理解数据库原理
以实战为基础,以数据库原理为基础,结合实战,深入理解数据库原理。
wangxiaoming

                                              java 产生正弦波

电子信息工程专业需要研究各种波形, 正弦比就是其中一种,下面简述一下用java 如何产生正弦波


1、首先新建一个类 sinWave  extend JFrame 类型
 
2、在类中加入一个 public sinWave(){} 方法  用 来实现的   

3、 其次设置尺寸大小, 用Dimension  获得品目尺寸 设置窗口出现的位置

4、 添加一个时间 time = new Timer(200, 事件) 时间里面做两件事 首先需要一个 ycopyionts[] 收入值后再粘上去  

5、需要天剑一个组件 ,添加组件     addComponetListener的目的也就是为了让 让事件加到里面去 组件做一件事情 赋值 time.start 即可

6、由于是面板, 那么肯定要画图了 ,继承画笔,设置衍射划线 drawLine DrawPolyLine() 等 

7、主函数 用类申明一个对象然后设置开关模式。。。。

下面是程序代码:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;


import javax.swing.JFrame;
import javax.swing.Timer;





public class sinWave extends JFrame{

private static final int NUM = 1500;
private static final double  TWOPI = 2*3.1415926;
private static final int STEP = 10;
private int width;
private int height;
private int i;
private int[] xPoint = new int[NUM];
private int[] yPoint = new int[NUM];
private int[] yCopyPoints = new int[STEP];
private Timer time;

public sinWave()
{     //设置面板 出现的尺寸和位置  
	 setSize(600,500);
	 setBackground(Color.WHITE);
	 Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize();
	 width = getWidth();
	 height = getHeight();
	 this.setLocation((scrSize.width - width)/2, (scrSize.height - height)/2);
	 setVisible(true);
	 //下面开始对xy 轴数据进行初始化
	 for(i= 0 ;  i < NUM ; i++)
	 {
		  xPoint [i] = width * i/NUM;
		  yPoint [i] = (int)(height/2 *(1- Math.sin(TWOPI* i/NUM)));
	 }
	 //下面添加一个时间监听器
	 time = new Timer(200, new ActionListener() {

		@Override
		public void actionPerformed(ActionEvent e) {
			// TODO Auto-generated method stub
			//在这个时间里面主要做两件事情 先截取一段然后黏在后面
			//而且做的事情越x 无关
			for(i = 0 ; i < STEP; i++)
			{
				yCopyPoints[i] = yPoint[i];
			}
			for(i = 0 ; i < NUM - STEP ; i++)
			{
				yPoint[i] = yPoint[i+ STEP];
			}
			for(i = 0; i < STEP ; i++)
			{
				yPoint[i+ NUM - STEP] = yCopyPoints[i];
			}
			repaint();
		}
	});
	 //时间监听事件完成之后现在要做的是加一个组件适配器
	 addComponentListener(new ComponentAdapter() {
		 //适配器中新建一个函数 给这个函数提那家一个事件
		 public void componentResized(ComponentEvent ce)
		 {
			 width = getWidth();
			 height = getHeight();
			 for(i = 0 ;  i < NUM ; i++)
			 {
				 xPoint[i] = width* i /NUM;
				 yPoint[i] = (int)(height/2 *( 1- Math.sin(TWOPI*i/NUM)));
			 }
		 }
	});
	
	 time.start();	 
}

//上面是主方法里面的实现下面是画图函数
public  void paint(Graphics g){
  super.paint(g); //继承
  g.setColor(Color.RED);
  g.drawLine(0, height/2, width, height/2);
  g.setColor(Color.GREEN);
  g.drawPolyline(xPoint, yPoint, NUM);
  
}
public static void main(String[] args)
{
	sinWave sinwave = new sinWave();
	sinwave.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}


wangxiaoming CSDN认证博客专家 架构 Spring Boot Redis
博客是很好的总结和记录工具,如果有问题,来不及回复,关注微信公众号:程序员开发者社区,获取我的联系方式,向我提问,也可以给我发送邮件,联系 1275801617@qq.com
©️2020 CSDN 皮肤主题: Age of Ai 设计师: meimeiellie 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值