⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jtrackergui.java

📁 该代码仿真了雷达信号图像中目标的跟踪算法,采用了java编写的
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
				}				catch (NumberFormatException exception)				{					dialogInput = JOptionPane.showInputDialog(null,"Please reenter x position.","Invalid x position",JOptionPane.ERROR_MESSAGE, null, null, token);					try{token = dialogInput.toString();}					catch(NullPointerException e){}					continue;				}				success=true;			}			token = (tokenizer.hasMoreTokens()) ? tokenizer.nextToken() : "y position";			success = false;			while(!success)			{				try				{					yin=Double.parseDouble(token);				}				catch (NumberFormatException exception)				{					dialogInput = JOptionPane.showInputDialog(null,"Please reenter y position.","Invalid y position",JOptionPane.ERROR_MESSAGE, null, null, token);					try{token = dialogInput.toString();}					catch(NullPointerException e){}					continue;				}				success=true;			}			tokenizer = new StringTokenizer(lp.Yin.getText(),"(), ", false);			token = (tokenizer.hasMoreTokens()) ? tokenizer.nextToken() : "range error";			success = false;			while(!success)			{				try				{					rin=Double.parseDouble(token);				}				catch (NumberFormatException exception)				{					dialogInput = JOptionPane.showInputDialog(null,"Reenter range error.","Invalid range error",JOptionPane.ERROR_MESSAGE, null, null, token);					try{token = dialogInput.toString();}					catch(NullPointerException e){}					continue;				}				success=true;			}			token = (tokenizer.hasMoreTokens()) ? tokenizer.nextToken() : "range rate error";			success = false;			while(!success)			{				try				{					rdotin=Double.parseDouble(token);				}				catch (NumberFormatException exception)				{					dialogInput = JOptionPane.showInputDialog(null,"Please reenter range rate error.","Invalid range rate error",JOptionPane.ERROR_MESSAGE, null, null, token);					try{token = dialogInput.toString();}					catch(NullPointerException e){}					continue;				}				success=true;			}			token = (tokenizer.hasMoreTokens()) ? tokenizer.nextToken() : "angle error";			success = false;			while(!success)			{				try				{					anglein=Double.parseDouble(token);				}				catch (NumberFormatException exception)				{					dialogInput = JOptionPane.showInputDialog(null,"Please reenter angular error.","Invalid angular error",JOptionPane.ERROR_MESSAGE, null, null, token);					try{token = dialogInput.toString();}					catch(NullPointerException e){}					continue;				}				success=true;			}			jetXmeter=xin;			jetYmeter=yin;			rStdv=rin;			rDotStdv=rdotin;			phiStdvRad=anglein*Math.PI/180;			lp.Xin.setText(Double.toString(xin)+", "+Double.toString(yin));			lp.Yin.setText(Double.toString(rin)+", "+Double.toString(rdotin)+", "+Double.toString(anglein));			// Initialize arrays for the real and estimated paths and the sensor measurements.			path=new double[4][length];			xhat=new double[4][length];			xmeas=new double[length];			// Used by the thread.			delay = (fps > 0) ? (int)(1000 / fps) : 100;			path[0][0]=jetXmeter;			path[1][0]=jetYmeter;			path[2][0]=xvelocity;			path[3][0]=yvelocity;			xhat[0][0]=0;			xhat[1][0]=0;			xhat[2][0]=0;			xhat[3][0]=0;			xmax=jetXmeter;			xmin=jetXmeter;			ymax=jetYmeter;			ymin=jetYmeter;			parts = new particleList(numParts);			resampled = new particleList(numParts);			for (int i=0; i<numParts; i++)			{				parts.xPosition[i]=jetXmeter+100*generator.nextGaussian();				parts.yPosition[i]=jetYmeter+100*generator.nextGaussian();				parts.xVelocity[i]=xvelocity+7.07107*generator.nextGaussian();				parts.yVelocity[i]=yvelocity+7.07107*generator.nextGaussian();				xhat[0][0]=xhat[0][0]+parts.xPosition[i];				xhat[1][0]=xhat[1][0]+parts.yPosition[i];				xhat[2][0]=xhat[2][0]+parts.xVelocity[i];				xhat[3][0]=xhat[3][0]+parts.yVelocity[i];			}			xhat[0][0]=xhat[0][0]/numParts;			xhat[1][0]=xhat[1][0]/numParts;			xhat[2][0]=xhat[2][0]/numParts;			xhat[3][0]=xhat[3][0]/numParts;			for (int i=1; i<length; i++)			{				double[] procnoise = new double[4];				for (int randcount=0; randcount<4; randcount++)				{					procnoise[randcount] = Qval*generator.nextGaussian();				}				path[0][i] = path[0][i-1] + (1.0/fps)*path[2][i-1] + noise[deltaT-1][0]*procnoise[0] + noise[deltaT-1][1]*procnoise[1];				path[2][i] = path[2][i-1] + noise[deltaT-1][1]*procnoise[0] + noise[deltaT-1][2]*procnoise[1];				path[1][i] = path[1][i-1] + (1.0/fps)*path[3][i-1] + noise[deltaT-1][0]*procnoise[2] + noise[deltaT-1][1]*procnoise[3];				path[3][i] = path[3][i-1] + noise[deltaT-1][1]*procnoise[2] + noise[deltaT-1][2]*procnoise[3];				xmax = Math.max(xmax, path[0][i]);				xmin = Math.min(xmin, path[0][i]);				ymin = Math.min(ymin, path[1][i]);				ymax = Math.max(ymax, path[1][i]);				xmax = Math.max(xmax, sensorXmeter);				xmin = Math.min(xmin, sensorXmeter);				ymax = Math.max(ymax, sensorYmeter);				ymin = Math.min(ymin, sensorYmeter); 		 	}			startThread();		}	}	private class clearListener implements ActionListener	{		public void actionPerformed (ActionEvent event)		{			animator=null;			// Sensor position is initially set at (0,0).			sensorXmeter=0;			sensorYmeter=0;			sensorWidth=16;			sensorHeight=16;			// Jet (target) position is initially set at (500,500) meters.			jetXmeter = 500;			jetYmeter = 500;			jetWidth = 63;			jetHeight = 28;			// The window is initially set to display from (0,0) to (1000,1000) meters.			// These variables determine the range of the display, and are automatically			// changed to keep the target path and the sensor on the display.			xmin = 0;			ymin = 0;			xmax = 1000;			ymax = 1000;			lp.Xin.setText("500, 500");			lp.Yin.setText("10, 10, 1");			lp.Qin.setText("10");			lp.Xvel.setText("-30");			lp.Yvel.setText("-30");			lp.Xsensor.setText("0");			lp.Ysensor.setText("0");			lp.MCIter.setText("2");			lp.Timestep.setText("50");			lp.Npart.setText("1000");			run=false;			animating=false;			ploterror=false;			rp.repaint();			pathErrorPanel.repaint();			measErrorPanel.repaint();		}	}	private class XinListener implements ActionListener	{		public void actionPerformed (ActionEvent event)		{			if (animating)				return;			tokenizer = new StringTokenizer(lp.Xin.getText(),"(), ", false);			token = (tokenizer.hasMoreTokens()) ? tokenizer.nextToken() : "x position";			success = false;			while(!success)			{				try				{					xin=Double.parseDouble(token);				}				catch (NumberFormatException exception)				{					dialogInput = JOptionPane.showInputDialog(null,"Please reenter x position.","Invalid x position",JOptionPane.ERROR_MESSAGE, null, null, token);					try{token = dialogInput.toString();}					catch(NullPointerException e){}					continue;				}				success=true;			}			token = (tokenizer.hasMoreTokens()) ? tokenizer.nextToken() : "y position";			success = false;			while(!success)			{				try				{					yin=Double.parseDouble(token);				}				catch (NumberFormatException exception)				{					dialogInput = JOptionPane.showInputDialog(null,"Please reenter y position.","Invalid y position",JOptionPane.ERROR_MESSAGE, null, null, token);					try{token = dialogInput.toString();}					catch(NullPointerException e){}					continue;				}				success=true;			}			jetXmeter = xin;			jetYmeter = yin;			xmax = Math.max(xmax, jetXmeter);			xmin = Math.min(xmin, jetXmeter);			ymax = Math.max(ymax, jetYmeter);			ymin = Math.min(ymin, jetYmeter);			lp.Xin.setText(Double.toString(xin)+", "+Double.toString(yin));			rp.repaint();		}	}	private class YinListener implements ActionListener	{		public void actionPerformed (ActionEvent event)		{			if (animating)				return;			tokenizer = new StringTokenizer(lp.Yin.getText(),"(), ", false);			token = (tokenizer.hasMoreTokens()) ? tokenizer.nextToken() : "range error";			success = false;			while(!success)			{				try				{					rin=Double.parseDouble(token);				}				catch (NumberFormatException exception)				{					dialogInput = JOptionPane.showInputDialog(null,"Reenter range error.","Invalid range error",JOptionPane.ERROR_MESSAGE, null, null, token);					try{token = dialogInput.toString();}					catch(NullPointerException e){}					continue;				}				success=true;			}			token = (tokenizer.hasMoreTokens()) ? tokenizer.nextToken() : "range rate error";			success = false;			while(!success)			{				try				{					rdotin=Double.parseDouble(token);				}				catch (NumberFormatException exception)				{					dialogInput = JOptionPane.showInputDialog(null,"Please reenter range rate error.","Invalid range rate error",JOptionPane.ERROR_MESSAGE, null, null, token);					try{token = dialogInput.toString();}					catch(NullPointerException e){}					continue;				}				success=true;			}			token = (tokenizer.hasMoreTokens()) ? tokenizer.nextToken() : "angle error";			success = false;			while(!success)			{				try				{					anglein=Double.parseDouble(token);				}				catch (NumberFormatException exception)				{					dialogInput = JOptionPane.showInputDialog(null,"Please reenter angular error.","Invalid angular error",JOptionPane.ERROR_MESSAGE, null, null, token);					try{token = dialogInput.toString();}					catch(NullPointerException e){}					continue;				}				success=true;			}			rStdv=rin;			rDotStdv=rdotin;			phiStdvRad=anglein*Math.PI/180;			lp.Yin.setText(Double.toString(rin)+", "+Double.toString(rdotin)+", "+Double.toString(anglein));		}	}	private class XsensorListener implements ActionListener	{		public void actionPerformed (ActionEvent event)		{			if (animating)				return;			sensorXmeter = Double.parseDouble(lp.Xsensor.getText());			xmax = Math.max(xmax, sensorXmeter);			xmin = Math.min(xmin, sensorXmeter);			rp.repaint();		}	}	private class YsensorListener implements ActionListener	{		public void actionPerformed (ActionEvent event)		{			if (animating)				return;			sensorYmeter = Double.parseDouble(lp.Ysensor.getText());			ymax = Math.max(ymax, sensorYmeter);			ymin = Math.min(ymin, sensorYmeter);			rp.repaint();		}	}public class particleList{	public double[] xPosition, yPosition, xVelocity, yVelocity, weight;	private double[] cumpr, u;	private Random random;	private int length;	public Color pcolor;	public particleList(int N)	{		length = N;		xPosition = new double[length];		yPosition = new double[length];		xVelocity = new double[length];		yVelocity = new double[length];		weight = new double[length];		random = new Random();	}	public void setOne(int index, double[] values)	{		xPosition[index] = values[0];		yPosition[index] = values[1];		xVelocity[index] = values[2];		yVelocity[index] = values[3];		weight[index] = values[4];	}	public double[] getOne(int index)	{		double[] values = new double[5];		values[0] = xPosition[index];		values[1] = yPosition[index];		values[2] = xVelocity[index];		values[3] = yVelocity[index];		values[4] = weight[index];		return values;	}	public particleList resample()	{		cumpr = new double[length];		particleList listOut = new particleList(length);		cumpr[0] = weight[0];		for (int i = 1; i<length; i++)			cumpr[i] = cumpr[i-1]+weight[i];		u = new double[length];		u[0] = 1.0*random.nextFloat()/length;		int i = 0;		for (int j = 0; j<length; j++)		{			u[j] = u[0] + (j*1.0)/length;			while (cumpr[i]<u[j])			{				i++;				if (i>=length)					break;			}			if (i < length)			{					double[] part=getOne(i);					listOut.setOne(j,part);			}			if (j < length && i >=length)			{				for (int count = j; count < length; count++)				{					double[] part=getOne(length);					listOut.setOne(count,part);				}			}			listOut.weight[j] = 1.0/length;		}		return listOut;	}	public void plotParticles(Graphics g, double xmin, double xmax, double ymin, double ymax, Dimension d)	{		g.setColor(pcolor);		for (int count=0; count<length; count++)		{			int x=(int)((xPosition[count]-xmin)*(d.width-70)/(xmax-xmin)+50);			int y=(int)(d.height-(yPosition[count]-ymin)*(d.height-40)/(ymax-ymin)-20);			g.drawRect(x,y,2,2);		}	}	}	/** Add Component Without a Layout Manager (Absolute Positioning) */	private void addComponent(Container container,Component c,int x,int y,int width,int height)	{		c.setBounds(x,y,width,height);		container.add(c);	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -