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

📄 erdeansicht.java

📁 java 开源游戏源码 RISK 联机对战 战棋类
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	texttmpsize=texttmpgr*texttmpgr;		
	texttmp=new int[texttmpsize];	
	for(int i=0;i<texttmpsize;i++) texttmp[i]=weiss;	
	for(int l=0;l<36;l++){
		for(int b=0;b<18;b++){			
			deform(l,b,l+1,b,l+1,b+1);
			deform(l,b,l,b+1,l+1,b+1);
		}
	}
	int transl=(puffer.getHeight(this)-texttmpgr)/2-2;	
	if(consumer != null){  		
		consumer.setPixels(0, 0, texttmpgr,texttmpgr, directCM, texttmp, 0, texttmpgr);
		consumer.imageComplete(2); 
 	}
	pufferg.drawImage(textproj,transl,transl,this);	
	}
}

public void deform(int l1,int b1,int l2,int b2,int l3,int b3){
	double[] V1=RotKugelNetz[l1%36][b1];
	double[] V2=RotKugelNetz[l2%36][b2];
	double[] V3=RotKugelNetz[l3%36][b3];
	if(V1[0]<0 && V2[0]<0 && V3[0]<0){
		int[] P1=proj(V1);
		int[] P2=proj(V2);
		int[] P3=proj(V3);	
		int[] map0=mappoint(l1,b1);
		int[] map1=mappoint(l2,b2);
		int[] map2=mappoint(l3,b3);
		int[] mapx={(int)map0[0],(int)map1[0],(int)map2[0]};
  		int[] mapy={(int)map0[1],(int)map1[1],(int)map2[1]};  		
  		int[] sx={P1[0],P2[0],P3[0]};
  		int[] sy={P1[1],P2[1],P3[1]};  		 	
  		draw3eck(mapx,mapy,sx,sy);  
	}	
}

public void scanline(int y,int xa,int xb,int[] mapx, int[] mapy,int[] scrx, int[] scry){
	int px=0; int py=y-scry[0];	
	int xstart=0; int xend=0;	
	int tmapx=0; int tmapy=0;	
	int tmpoffset=(y+addmxy)*texttmpgr+addmxy;	
	if(xa<=xb){ xstart=xa; xend=xb;} else { xstart=xb; xend=xa;}	
	px=xstart-scrx[0];		
	double ustart=(dvx*py)/((double)dudvdet);
	double vstart=(dux*py)/((double)dudvdet);
	double uschritt=dvy/((double)dudvdet);
	double vschritt=duy/((double)dudvdet);
	double u=px*uschritt-ustart;
	double v=vstart-px*vschritt;	
	double tmapxr=mapx[0]+u*mdux+v*mdvx;
	double tmapyr=mapy[0]+u*mduy+v*mdvy;
	double ux=uschritt*mdux;
	double uy=uschritt*mduy;
	double vx=vschritt*mdvx;
	double vy=vschritt*mdvy;
	double uxvx=ux-vx;
	double uyvy=uy-vy;
	int i=0;	
	int j=tmpoffset+xstart;
	for(int mx=xstart;mx<=xend;mx++){
		tmapxr=tmapxr+uxvx;
		tmapyr=tmapyr+uyvy;
		i=(int)tmapyr*textwidth+(int)tmapxr;
		if(i>=0 && i<textsize && j>=0 && j<texttmpsize)	texttmp[j]=text[i];
		j++;
	}	
}

public void draw3eck(int[] mapx,int[] mapy,int[] scrx,int[] scry){
	if(scry[0]>scry[1]){
		int tmp;
		tmp=scry[1]; scry[1]=scry[0]; scry[0]=tmp;
		tmp=scrx[1]; scrx[1]=scrx[0]; scrx[0]=tmp;
		tmp=mapy[1]; mapy[1]=mapy[0]; mapy[0]=tmp;
		tmp=mapx[1]; mapx[1]=mapx[0]; mapx[0]=tmp;		
	}
	if(scry[0]>scry[2]){
		int tmp;
		tmp=scry[0]; scry[0]=scry[2]; scry[2]=tmp;
		tmp=scrx[0]; scrx[0]=scrx[2]; scrx[2]=tmp;
		tmp=mapy[0]; mapy[0]=mapy[2]; mapy[2]=tmp;
		tmp=mapx[0]; mapx[0]=mapx[2]; mapx[2]=tmp;		
	}
	if(scry[1]>scry[2]){
		int tmp;
		tmp=scry[1]; scry[1]=scry[2]; scry[2]=tmp;
		tmp=scrx[1]; scrx[1]=scrx[2]; scrx[2]=tmp;
		tmp=mapy[1]; mapy[1]=mapy[2]; mapy[2]=tmp;
		tmp=mapx[1]; mapx[1]=mapx[2]; mapx[2]=tmp;		
	}	
	dux=scrx[1]-scrx[0];
	duy=scry[1]-scry[0];
	dvx=scrx[2]-scrx[0];
	dvy=scry[2]-scry[0];
	dudvdet=dux*dvy-duy*dvx;
	if(dudvdet!=0){
		addmxy=texttmpgr/2+2;			
		double delta01=0;
		double delta02=0;
		double delta12=0;
		mdux=mapx[1]-mapx[0]; mduy=mapy[1]-mapy[0]; 
		mdvx=mapx[2]-mapx[0]; mdvy=mapy[2]-mapy[0];	
		double xa=(double)scrx[0];
		double xb=xa;	
		if(scry[0]-scry[1]!=0)
			delta01=(dux)/(double)(duy);
		else 
			xa=scrx[1];	
		if(scry[0]-scry[2]!=0) delta02=(dvx)/(double)(dvy);
		if(scry[1]-scry[2]!=0) delta12=(scrx[1]-scrx[2])/(double)(scry[1]-scry[2]);				
		for(int y=scry[0];y<scry[1];y++){
			scanline(y,(int)xa,(int)xb, mapx, mapy, scrx, scry);	
			xa=xa+delta01;
			xb=xb+delta02;
		}
		for(int y=scry[1];y<=scry[2];y++){
			scanline(y,(int)xa,(int)xb, mapx, mapy, scrx, scry);	
			xa=xa+delta12;
			xb=xb+delta02;
		}
	}
}

//////////////////////////////////////////////////////////////
//
// Abschnitt Objekte
//
//////////////////////////////////////////////////////////////

public void box(){
	double[] p1={-1.0,-1.0,-1.0};
	double[] p2={-1.0,1.0,-1.0};
	double[] p3={-1.0,1.0,1.0};
	double[] p4={-1.0,-1.0,1.0};
	double[] p5={1.0,-1.0,-1.0};
	double[] p6={1.0,1.0,-1.0};
	double[] p7={1.0,1.0,1.0};
	double[] p8={1.0,-1.0,1.0};
	
	setline(p1,p2,Color.black);	
	setline(p2,p3,Color.black);	
	setline(p3,p4,Color.black);	
	setline(p4,p1,Color.black);	
	setline(p5,p6,Color.black);	
	setline(p6,p7,Color.black);	
	setline(p7,p8,Color.black);	
	setline(p8,p5,Color.black);	
	setline(p1,p5,Color.black);	
	setline(p2,p6,Color.black);	
	setline(p3,p7,Color.black);	
	setline(p4,p8,Color.black);	
}

public void kords(){
	double[] p1={1.0,0.0,0.0}; double[] p2={5.0,0.0,0.0}; setline(p1,p2,Color.black);	
	double[] p3={-1.0,0.0,0.0}; double[] p4={-5.0,0.0,0.0}; setline(p3,p4,Color.black);	
	double[] p5={0.0,1.0,0.0}; double[] p6={0.0,5.0,0.0}; setline(p5,p6,Color.black);	
	double[] p7={0.0,-1.0,0.0}; double[] p8={0.0,-5.0,0.0}; setline(p7,p8,Color.black);	
	double[] p9={0.0,0.0,1.0}; double[] p10={0.0,0.0,5.0}; setline(p9,p10,Color.black);	
	double[] p11={0.0,0.0,-1.0}; double[] p12={0.0,0.0,-5.0}; setline(p11,p12,Color.black);		
}

public void kegel(){	
	punkte=new double[3000][3];
	farbe=new Color[1500];
	anzlinie=0;
	double[] p2={0,0,Math.sqrt(2)};
	for(int i=0;i<36;i++){		
		double wi=toradians(i*10);
		double coswi=Math.cos(wi);
		double sinwi=Math.sin(wi);				
		double[] p1={coswi*Math.sqrt(2),sinwi*Math.sqrt(2),0};
		setline(p1,p2,Color.black);
	}
	for(int j=0;j<36;j++){
		double wi=toradians(j*10);
		double coswi=Math.cos(wi)*Math.sqrt(2);
		double sinwi=Math.sin(wi)*Math.sqrt(2);				
		double wi2=toradians(((j+1)*10)%360);
		double coswi2=Math.cos(wi2)*Math.sqrt(2);
		double sinwi2=Math.sin(wi2)*Math.sqrt(2);							
		double[] oben1={coswi,sinwi,0};
		double[] oben2={coswi2,sinwi2,0};
		setline(oben1,oben2,Color.black);		
	}	
}

public void zylinder(){	
	punkte=new double[3000][3];
	farbe=new Color[1500];
	anzlinie=0;
	for(int i=0;i<36;i++){
		double wi=toradians(i*10);
		double coswi=Math.cos(wi);
		double sinwi=Math.sin(wi);				
		double[] p1={coswi,sinwi,-1};
		double[] p2={coswi,sinwi,1};
		setline(p1,p2,Color.black);
	}	
	for(int j=0;j<36;j++){
		double wi=toradians(j*10);
		double coswi=Math.cos(wi);
		double sinwi=Math.sin(wi);				
		double wi2=toradians(((j+1)*10)%360);
		double coswi2=Math.cos(wi2);
		double sinwi2=Math.sin(wi2);							
		double[] oben1={coswi,sinwi,1};
		double[] oben2={coswi2,sinwi2,1};
		setline(oben1,oben2,Color.black);
		double[] unten1={coswi,sinwi,-1};
		double[] unten2={coswi2,sinwi2,-1};
		setline(unten1,unten2,Color.black);
	}			
}

public void tangent(double z){	
	punkte=new double[3000][3];
	farbe=new Color[1500];
	anzlinie=0;
	for(double i=-1;i<=1;i=i+0.1){
		double[] p1={i,1,z};
		double[] p2={i,-1,z};
		double[] p3={1,i,z};
		double[] p4={-1,i,z};		
		setline(p1,p2,Color.black);			
		setline(p3,p4,Color.black);			
	}
}

public void kugel(){
	// Breitenkreise
	for(int b=0;b<=18;b++){
		for(int l=0;l<36;l++){
			line3dkugel(RotKugelNetz[l][b],RotKugelNetz[(l+1)%36][b],b==9?Color.red:Color.lightGray);
		}
	}
	// Laengenkreise
	for(int l=0;l<36;l++){
		for(int b=0;b<18;b++){
			line3dkugel(RotKugelNetz[l][b],RotKugelNetz[l][b+1],(l==0||l==18)?Color.red:Color.lightGray);
		}
	}	
}

//////////////////////////////////////////////////////////////
//
// Abschnitt Zeichnungs und repaint-Prozeduren
//
//////////////////////////////////////////////////////////////

public void zeichnen() {

	if(puffer!=null){

		//pufferg.setColor(Color.BLACK);
		//pufferg.fillRect(0,0,this.getSize().width,this.getSize().height);
	
		rotkugel();

		if(zeichnetex==true) {

			gettext();

		}

		if (wireframe) {

			kugel();
		}

		for(int i=0;i<anzlinie;i++) line3d(punkte[i*2],punkte[i*2+1],farbe[i]);	
		if(ismark==true){
			line3d(mark[0],mark[1],Color.red); line3d(mark[2],mark[3],Color.red);
		}

		if (showinfo) {

			pufferg.setColor(Color.WHITE);

			pufferg.drawString("Longitude: "+Double.toString(Math.abs(phigrad))+(phigrad>=0?"E":"W"),10,20);
			pufferg.drawString("Latitude: "+Double.toString(Math.abs(psigrad))+(psigrad>=0?"N":"S"),10,35);

		}

		paintComponent(getGraphics());
		//repaint();		
	}
}

public void paintComponent(Graphics g){	
	if(puffer!=null) g.drawImage(puffer,0,0,this);	
}

//public void update(Graphics g){   
//	paint(g);
//}

//////////////////////////////////////////////////////////////
//
// Abschnitt Drehen mit Maus
//
//////////////////////////////////////////////////////////////

	public void rotate(double a,double b) {

		setrot(phigrad+a,psigrad+b);
		zeichnen();

	}

	public void toggleWireframe() {

		wireframe = !wireframe;
		zeichnen();
	}

	public void toggleInfo() {

		showinfo = !showinfo;
		zeichnen();
	}

}

⌨️ 快捷键说明

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