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

📄 grid.java

📁 时空图计算和编辑程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	}
	public String CreatCauculator(int amount,int time,int evenum)
	{//创建计算任务
		int max=MiniDivision()/Global.LENGTH;//最大间距
		int miniTime=max*evenum;//最小周期时间
		//System.out.println(amount+"/"+time+"/"+evenum+"/"+max);
		if(time<miniTime)return null;//如果小于最低时间,返回
		if(amount>200) return null;
		int miniWidth=(amount-1)*max+(new Square(style)).getWidth()/Global.LENGTH
					  +amount*(time-miniTime)/evenum+1;
		//System.out.println(miniWidth);
		if(container!=null && miniWidth<container.getWidth()/Global.LENGTH+1)
			 miniWidth=container.getWidth()/Global.LENGTH+1;
		//创建空对象
		Grid gtmp=new Grid(miniWidth*Global.LENGTH+Global.START_X,size.height,container);
		gtmp.setStyle(style);
		//添加对象
		int x,y=size.height-Global.LENGTH*4;
		for(int i=0;i<amount;i++)
		{
			Square stmp=gtmp.MakeIns();
			x=Global.START_X+((i)/evenum)*time*Global.LENGTH+(i%evenum)*max*Global.LENGTH;
			//System.out.println(x+"/"+y+"/"+stmp.number);
			if(gtmp.LocateIns(stmp,x,y))
			{
				gtmp.addIns(stmp);
			}
		}
		return gtmp.output();
	}
	/*
	 * 输出
	 * */
	public String outputResult()
	{//输出计算结果
		if(size()==0)return null;
		double T,//任务总时间
				P,//吞吐率
				S,//加速度比
				E,//效率
				N;//总任务量
		StringBuffer console=new StringBuffer();//输出
		//开始计算
		//总任务量
		N=size();
		//总时间
		Square s[]=this.getAllIns();
		Rectangle r=s[0].getBounds();
		int minX=r.x,maxX=r.x;
		int minY=r.y,maxY=r.y;
		int w=r.width,h=r.height,width,height;
		for(int i=0;i<s.length;i++)
		{
			r=s[i].getBounds();
			if(r.x<minX)minX=r.x;
			if(r.x>maxX)maxX=r.x;
			if(r.y<minY)minY=r.y;
			if(r.y>maxY)maxY=r.y;
			if(r.width>w)w=r.width;
			if(r.height>h)h=r.height;
		}
		width=(maxX-minX+w)/Global.LENGTH;//宽度格数
		height=(maxY-minY+h)/Global.LENGTH;//高度格数
		T=width;//总时间
		//吞吐量
		int ptmp=(int)(N*1000/T);//吞吐率
		P=(double)ptmp/1000;
		//加速度比
		double T0=N*(int)(s[0].getWidth()/Global.LENGTH);
		int stmp=(int)(T0*1000/T);
		S=(double)stmp/1000;
		//效率
		double s1=width*height,s2=T0;
		stmp=(int)(s2*1000/s1);
		E=(double)stmp/1000;
		//开始输出
		Calendar date=Calendar.getInstance();
		int th=date.get(Calendar.HOUR_OF_DAY),
			tm=date.get(Calendar.MINUTE),
			ts=date.get(Calendar.SECOND);
		console.append("\n计算任务时间:"+(th<10?"0"+th:""+th)+":"+(tm<10?"0"+tm:""+tm)+":"+(ts<10?"0"+ts:""+ts)+"\n");
		console.append("---------计算结果---------\n");		
		console.append("总任务量:N=[ "+N+" ]\n");
		console.append("总时间: T =[ "+T+" ]*dt\n");
		console.append("吞吐量: P =[ "+P+" ]*1/dt\n");
		console.append("加速度比: S =[ "+S+" ]\n");
		console.append("效率: E =[ "+E+" ]\n");
		console.append("---------杂项数据---------\n");
		console.append("顺序执行时间:T0=[ "+T0+" ]*dt\n");
		console.append("时空图有效面积:Sk=[ "+T0+" ]grid^2\n");
		console.append("时空图总面积:S0=[ "+s1+" ]grid^2\n");
		console.append("时空图尺寸:Size=[ "+width+" , "+height+" ]grid\n");
		console.append("生成图像尺寸:Size=[ "+size.width+" , "+(size.height+2*Global.LENGTH)+" ]pixel\n");
		return console.toString();
	}
	public String output()
	{//序列化输出
		StringBuffer buf=new StringBuffer();
		buf.append(size.width+SEPRETOR+size.height+SEPRETOR);
		Square itmp;
		for(int i=0;i<inslst.size();i++)
		{
			itmp=(Square)inslst.get(i);
			buf.append(itmp.output()+SEPRETOR);
		}
		return buf.toString();
	}
	public void input(String str)
	{//序列化输入
		String instr[]=str.trim().split(SEPRETOR);
		size.width=Integer.parseInt(instr[0]);
		size.height=Integer.parseInt(instr[1]);
		//清空
		inslst.clear();
		for(int i=0;i<instr.length-2;i++)
		{//加载数据
			if(instr[i+2].length()<2)continue;
			Square itmp=new Square(0);
			itmp.input(instr[i+2].trim());
			itmp.container=container;
			addIns(itmp);
		}
		style=((Square)inslst.get(0)).getGrid();
	}
	/*
	 * 输出图像
	 * */
	public BufferedImage ProduceBackImage()
	{//产生标准图像
		int w=size.width,h=size.height+Global.LENGTH*2,ZeroY=0;
		BufferedImage image=new BufferedImage(w,h,BufferedImage.TYPE_INT_ARGB_PRE);
		Graphics2D g=image.createGraphics();
		g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
		//开始绘制
		//填充背景
		g.setColor(Color.WHITE);
		g.fillRect(0,0,w,h);
		//绘制网格
		int gridX=w/Global.LENGTH+1,gridY=h/Global.LENGTH,x,y;
		g.setColor(Color.LIGHT_GRAY);
		for(int i=0;i<gridX;i++)
			for(int j=0;j<gridY;j++)
			{
				y=Global.LENGTH*j;
				x=Global.START_X+Global.LENGTH*i;
				g.drawLine(x,0,x,h);
				g.drawLine(Global.START_X,y,w,y);
				if(j==gridY-2 )
				{
					ZeroY=y;
				}
			}
		g.setColor(Color.GRAY);
		for(int i=0;i<gridX;i++)
		{
			x=Global.START_X+Global.LENGTH*i+3;
			g.drawString("t "+i,x,ZeroY+14);
		}
		//绘制坐标线
		g.setColor(Color.BLACK);
		g.setStroke(new BasicStroke(1.2f));
		g.drawLine(Global.START_X,0,Global.START_X,h);
		g.drawLine(Global.START_X,ZeroY,w,ZeroY);
		//绘制边框
//		底部
		GradientPaint paint=new GradientPaint(0,ZeroY+Global.LENGTH/2,new Color(255,255,255,60),0,h-Global.LENGTH,Color.WHITE);
		g.setPaint(paint);
		g.fillRect(0,ZeroY+Global.LENGTH/2,w,h-ZeroY);
//		顶部
		paint=new GradientPaint(0,Global.LENGTH,new Color(255,255,255,60),0,10,Color.WHITE);
		g.setPaint(paint);
		g.fillRect(0,0,w,Global.LENGTH);
		//绘制文字
		g.setColor(Color.BLACK);
		g.drawString("S 空间",Global.START_X+2,Global.LENGTH*2-5);
		g.drawString("T 时间",w-Global.LENGTH*2,ZeroY+Global.LENGTH);
		//释放资源
		g.dispose();
		return image;
	}
	public BufferedImage outputReportImage()
	{//输出报告图像1
		if(inslst.size()==0)return null;
		BufferedImage image=ProduceBackImage();
		Graphics2D g=image.createGraphics();
		g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
		//绘制晶圆
		for(int i=0;i<inslst.size();i++){
			Square stmp=(Square)inslst.get(i);
			stmp.setLocation(stmp.getLocation());
			stmp.paint(g);
		}
		//释放资源
		g.dispose();
		return image;
	}
	public BufferedImage outputReportImage2()
	{//导出细化图像
		if(inslst.size()==0)return null;
		BufferedImage image=ProduceBackImage();
		Graphics2D g=image.createGraphics();
		g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
		Point foreloc[]=DivisionDetail();
		//绘制晶圆
		for(int i=0;i<inslst.size();i++){
			Square stmp=(Square)inslst.get(i);
			//stmp.setLocation(stmp.getLocation());
			stmp.paint(g);
			stmp.setLocation(foreloc[i]);
		}
		//释放资源
		g.dispose();
		return image;
	}
	public BufferedImage outputDivSample()
	{//产生细分建议图像
		int count=0,maxY=0;
		for(int i=0;i<style.length;i++)
		{
			if(style[i]>maxY)maxY=style[i];
			count+=style[i];
		}
		//准备数据元素
		int w=9*Global.LENGTH,h=(2*maxY+1)*Global.LENGTH;
//		开始创建图像
		BufferedImage image=new BufferedImage(w,h,BufferedImage.TYPE_4BYTE_ABGR_PRE);
		Graphics2D g=image.createGraphics();
		g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
		g.setColor(Color.GRAY);
		g.setStroke(new BasicStroke(1.5f));
		for(int i=0;i<4;i++)
		{
			int x=(2*i+1)*Global.LENGTH,
		   		y=h/2-(style[i]*2+1)*Global.LENGTH/2;
			for(int j=0;j<style[i];j++)
			{
				Cell cell=new Cell("S"+(i+1)+"-"+(j+1));
				cell.myback=Color.GRAY;
				cell.loc.setLocation(x,y+(j*2+1)*Global.LENGTH);
				cell.paint(g);
//				横线
				g.drawLine(x-Global.LENGTH/2,cell.loc.y+Global.LENGTH/2,x,cell.loc.y+Global.LENGTH/2);
				g.drawLine(x+Global.LENGTH,cell.loc.y+Global.LENGTH/2,x+Global.LENGTH+Global.LENGTH/2,cell.loc.y+Global.LENGTH/2);
			}
			//纵线
			int xtmp=x-Global.LENGTH/2,xtmp2=x+Global.LENGTH*3/2,
				ytmp=y+Global.LENGTH*3/2,ytmp2=y+(2*style[i])*Global.LENGTH-Global.LENGTH/2;
			g.drawLine(xtmp,ytmp,xtmp,ytmp2);
			g.drawLine(xtmp2,ytmp,xtmp2,ytmp2);
			//文字
			g.drawString((i+1)+"*dt",x+4,y+2*style[i]*Global.LENGTH+12);
			
		}
		g.drawLine(0,h/2,Global.LENGTH/2,h/2);
		g.drawLine(8*Global.LENGTH+Global.LENGTH/2,h/2,w,h/2);
		//g.setColor(Color.GRAY);
		//g.drawRect(0,0,w-1,h-1);
		g.dispose();
		return image;
	}
	public Color getRandomColor()
	{//获取一个随机图像
		int r=(int)(Math.random()*80)+175;
		int g=(int)(Math.random()*255);
		int b=(int)(Math.random()*255);
		return new Color(r,g,b);
	}
	/*
	 * 图像绘制
	 * */
	public void paint(Graphics2D g2)
	{//绘制图象
		for(int i=0;i<inslst.size();i++)
			((Square)inslst.get(i)).paint(g2);
	}
	public class Cell
	{
		//绘制用散装Cell
		public Color myback;
		public String txt;
		public BufferedImage myImage;
		public Point loc=new Point();
		Cell(String str)
		{
			txt=str;
			
		}
		public void initMyImage()
		{//初始化透明蒙板
			myImage=new BufferedImage(Global.LENGTH,Global.LENGTH,BufferedImage.TYPE_4BYTE_ABGR_PRE);
			Graphics2D g=myImage.createGraphics();
			//绘制
			Color color1=new Color(0,0,0,0);
			Color color2=new Color(255,255,255,128);
			GradientPaint p1=new GradientPaint(0,0,color1,Global.LENGTH/2,Global.LENGTH/2,color2,true);
			g.setPaint(p1);
			g.fillRect(0,0,Global.LENGTH,Global.LENGTH);
			g.dispose();
		}
		public void paint(Graphics2D g)
		{//绘制
			g.setColor(myback);
			g.fillRoundRect(loc.x+2,loc.y+2,Global.LENGTH-3,Global.LENGTH-3,8,8);
			//g.drawRoundRect(myloc.x+2,myloc.y+2,Global.LENGTH-3,Global.LENGTH-3,8,8);
			//绘制玻璃化效果
			if(myImage==null && container!=null)
			{
				initMyImage();
			}
			if(myImage!=null)
				g.drawImage(myImage,loc.x,loc.y,container);
			g.setColor(Color.BLACK);
			g.drawString(txt,loc.x+3,loc.y+Global.LENGTH/2+6);
		}
		
	}
}

⌨️ 快捷键说明

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