群体智能-粒子群算法--使用java对于粒子群系统的显示(2)

本文介绍如何使用Java实现粒子群算法,并在二维平面上动态展示。通过不断迭代更新,寻找最优解,文章讲解了创建JFrame窗体、监听鼠标操作、线程逻辑以及速度和位置的计算。同时,作者提到了使用双缓冲技术避免闪屏问题,以确保动画流畅。最后,提供了代码下载链接供读者参考。
摘要由CSDN通过智能技术生成

大家好,可爱的小编今天来补充剩下的关于粒子群算法的想法。

呃呃,今天呢?小编主要谈的是关于如何编写这个的java实现代码。其实,关于代码实现呢?这个小编觉得,其实有时候你的编程思维很重要,可能要是一开始你的对于你的代码实现的整个的结构不是很清晰,其实想要比较好的展现这个效果还是蛮难的。但是,小编今天想分享自己写这类程序的相关套路,大家互相学习学习哈。

先来简单的理下思绪,想想我们的目的是什么?我们怎么样才算是验证了这个算法呢?我想,这个算法的,是想验证    通过局部最优,全局最优,以及不断的迭代,更新,最终我们能够无尽的逼近我们的最优解。好了吧,虽然所理论上,对于最优解的维度的话,其实是不加以限制的,但是这里的话,鉴于笔者的能力,暂时的话,就只是讨论2维层面的吧(3D效果之前没有接触过,哈哈)。朴素点来说,我们的目的,就是验证一群均匀分布在一片二维平面上的蜜蜂(速度是随机的),然后一旦有目标出现,可以通过这个粒子群算法,迅速的定位在目标位置周围。

然后我们有了思路,就可以来想想,我们该怎么办,要怎么show呢?不过在此之前,其实大家应该准备几张比较精美的图片吧,作为背景嘛,然后准备一张小动物的小图片,其实gif的图片更好,省得你要去找一组图来进行拼接。然后呢?我想先总结下这种程序的相关特征,以方便大家使用套路啊。特征不外乎:1.我们需要不间断的显示我们的图片 2.然后随着鼠标点击事件,或者键盘事件,图片会有相应的移动现象 3.以上的整个画面中图片的切换需要表现的十分的流畅。   好吧,看到这里,是不是感觉,有点和我们小时候玩的小霸王游戏机上面的游戏很相似呢?哈哈,是不是很激动,小编第一次了解到的时候,情绪那叫一个激动啊。反正,就是说只要会了这个,相关的游戏也可以完成啦。啦啦啦。


我对于这类程序的分析:1.首先我们得要有一个Jframe窗体吧,不然,你怎么show呢?好,看代码

package TryTest43;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;

import javax.swing.JFrame;

public class MainJFrame extends JFrame{

	public Graphics g;
	public Image img;
	public static int JFrame_Width;
	public static int JFrame_Height;
	public MainJFrame(){
		init();
		
	}
	
	public void init(){
		this.setSize(Toolkit.getDefaultToolkit().getScreenSize());
		this.setTitle("蜜蜂寻觅演示");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setLocationRelativeTo(null);
		this.setVisible(true);
		Graphics g1=this.getGraphics();
		img=this.createImage(this.getWidth(),this.getHeight());

		g=img.getGraphics();
		this.addMouseListener(new MyMouseListener(g,g1,img));

		
		
		
	}
	
	public static void main(String[] args){
		MainJFrame jf=new MainJFrame();
		
		
	}

}

其实,挺简单对吧,就是新建一个JFrame的继承类,然后加下监听器,监听我们的鼠标的操作嘛。然后就是对于鼠标监听器中相关代码。

package TryTest43;

import java.awt.Graphics;
import java.awt.Image;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;



public class MyMouseListener implements MouseListener {
	public Graphics g;
	public Graphics g1;
	public Image img;
	public TDimension dimen;

	
	public static int flag=1;
	public NewThread td;
	public MyMouseListener(Graphics g,Graphics g1,Image img){
		this.g=g;
		this.g1=g1;
		this.img=img;

		dimen=new TDimension(g, g1);
		
		td=new NewThread(dimen);
		td.start();
		
	}
	
	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub

		if(e.getButton()==MouseEvent.BUTTON1){
			MyPoint Target=new MyPoint();
			Target.x=e.getX();
			Target.y=e.getY();
			
//			System.out.println(td);
			
			td.setTarget(Target);
		}
		if(e.getButton()==MouseEvent.BUTTON3){
//			System.out.println("rrrrrrrrrrrrrrrrr");
			td.isTone=true;
			td.setTone(e.getPoint());
			dimen.flag=true;
		}
		
	
	}

	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	public void mouseReleased(MouseEvent e) {
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值