📄 grid.java
字号:
}
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 + -