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