import java.applet.Applet; import java.awt.*; public class Siteit extends java.applet.Applet{ TextArea ans = new TextArea("Polar: Bearing and distance are calculated\nRect: Target coordinates are calculated",1,5,1); TextField seText= new TextField(2); TextField snText= new TextField(2); TextField teText= new TextField(2); TextField tnText= new TextField(2); TextField rText= new TextField(2); TextField wcbText= new TextField(2); protected void addGridLabel(String labelName,int align,GridBagLayout gb, GridBagConstraints gbc){ Label label=new Label(labelName,align); gb.setConstraints(label,gbc); add(label); } protected void addGridField(TextField textfield,GridBagLayout gb, GridBagConstraints gbc){ gb.setConstraints(textfield,gbc); add(textfield); } protected void addGridArea(TextArea textarea,GridBagLayout gb, GridBagConstraints gbc){ gb.setConstraints(textarea,gbc); add(textarea); } protected void addGridButton(Button button,GridBagLayout gb, GridBagConstraints gbc){ gb.setConstraints(button,gbc); add(button); } public void init(){ resize(300,300); GridBagLayout gridbag=new GridBagLayout(); GridBagConstraints c =new GridBagConstraints(); setLayout(gridbag); c.fill=GridBagConstraints.BOTH; c.gridwidth=GridBagConstraints.REMAINDER; //c.gridheight=2; c.weighty=1; addGridLabel("Java Bearing Calculator",1,gridbag,c); c.weighty=0; c.gridheight=1; c.gridwidth=3; addGridLabel("Station East",1,gridbag,c); c.weightx=1.5; //c.weightx=1.5; addGridField(seText,gridbag,c); c.weightx=1; c.gridwidth=GridBagConstraints.REMAINDER; addGridLabel("",1,gridbag,c); c.gridheight=1; c.gridwidth=3; c.weightx=0; addGridLabel("Station North",1,gridbag,c); c.weightx=1.5; addGridField(snText,gridbag,c); c.weightx=1; c.gridwidth=GridBagConstraints.REMAINDER; addGridLabel("",1,gridbag,c); c.gridheight=1; c.gridwidth=3; c.weightx=0; addGridLabel("Target East",1,gridbag,c); c.weightx=1.5; addGridField(teText,gridbag,c); c.weightx=1.0; c.gridwidth=GridBagConstraints.REMAINDER; addGridLabel("",1,gridbag,c); c.gridheight=1; c.gridwidth=3; c.weightx=0; addGridLabel("Target North",1,gridbag,c); c.weightx=1.5; addGridField(tnText,gridbag,c); c.weightx=1.0; c.gridwidth=GridBagConstraints.REMAINDER; addGridLabel("",1,gridbag,c); c.gridheight=1; c.gridwidth=3; c.weightx=0; addGridLabel("Distance",1,gridbag,c); c.weightx=1.5; addGridField(rText,gridbag,c); c.weightx=1.0; c.gridwidth=GridBagConstraints.REMAINDER; addGridLabel("",1,gridbag,c); c.gridheight=1; c.gridwidth=3; c.weightx=0; addGridLabel("Bearing",1,gridbag,c); c.weightx=1.5; addGridField(wcbText,gridbag,c); c.weightx=1; c.gridwidth=GridBagConstraints.REMAINDER; addGridLabel("",1,gridbag,c); c.gridwidth=GridBagConstraints.REMAINDER; addGridLabel("Please Enter Bearing in Form DDD:MM:SS",1,gridbag,c); Button polar = new Button("Polar"); Button rect = new Button("Rect"); c.gridheight=1; c.gridwidth=3; c.weightx=0; addGridLabel("",1,gridbag,c); c.weightx=1.5; addGridButton(polar,gridbag,c); c.weightx=1; c.gridwidth=GridBagConstraints.REMAINDER; addGridLabel("",1,gridbag,c); c.gridheight=1; c.gridwidth=3; c.weightx=0; addGridLabel("",1,gridbag,c); c.weightx=1.5; addGridButton(rect,gridbag,c); c.weightx=1; c.gridwidth=GridBagConstraints.REMAINDER; addGridLabel("",1,gridbag,c); c.weighty=1; c.gridwidth=GridBagConstraints.REMAINDER; addGridArea(ans,gridbag,c); } public boolean action(Event evt, Object obj){ double se, sn, te, tn,dis,rad; if(evt.target instanceof Button){ ans.setText("Polar: Bearing and distance are calculated\nRect: Target coordinates are calculated"); String buttonName=(String)obj; try{ se = new Double(seText.getText()).doubleValue(); }catch(NumberFormatException e){ ans.setText("Station East is not a valid Number"); return true; } try{ sn = new Double(snText.getText()).doubleValue(); }catch(NumberFormatException e){ ans.setText("Station North is not a valid Number"); return true; } if (buttonName.equals("Polar")){ try{ te = new Double(teText.getText()).doubleValue(); }catch(NumberFormatException e){ ans.setText("Target East is not a valid Number"); return true; } try{ tn = new Double(tnText.getText()).doubleValue(); }catch(NumberFormatException e){ ans.setText("Target North is not a valid Number"); return true; } pol(se,sn,te,tn); }else{ try{ dis = new Double(rText.getText()).doubleValue(); }catch(NumberFormatException e){ ans.setText("Distance is not a valid Number"); return true; } try{ rad = flIna(wcbText.getText()); }catch(NumberFormatException e){ ans.setText("Bearing is not in valid format \nExample 45:00:00"); return true; } rect(se,sn,dis,rad); } return true; } return false; } public void pol(double se,double sn, double te, double tn){ double diffe =te-se; double diffn =tn-sn; rText.setText(flFix(Math.sqrt(diffe*diffe+diffn*diffn))); wcbText.setText(flDMS(rad2bear(diffe,diffn))); } public String flFix(double num){ double formatnum =Math.round(num*1000)/1000.0; String strans=new String().valueOf(formatnum); return strans ; } public double rad2bear(double de,double dn){ int quad=1; double radbear; if (dn<0 ){ if (de<0 ){ quad = 3; }else{ quad = 2; } } if ((dn>0)&&(de<0)){ quad = 4; } if (Math.abs(dn)>0 ){ radbear =Math.atan(de/dn); }else{ radbear = Math.PI/2; if (de<0 ){ radbear+= Math.PI; } } if (quad == 2 ){ radbear+= Math.PI; } if (quad ==3 ) { radbear+= Math.PI; } if (quad == 4 ) { radbear+= Math.PI*2; } if ((Math.abs(de)<0.001) &&(Math.abs(dn)<0.001)){ radbear = 0; } return radbear; } public String flDMS (double radang){ String strAng; int degs,mins,secs; double dmsang,dsecs,temp; dmsang = radang *180/Math.PI; while ( dmsang<360 ){ dmsang+=360; } while ( dmsang>=360 ){ dmsang-=360; } degs=(int)Math.floor(dmsang); mins=(int)Math.floor((dmsang-degs)*60); dsecs = (dmsang-degs-mins/60.0)*3600; temp = dsecs -Math.floor(dsecs); if (temp > 0.5 ){ dsecs +=1; } secs = (int)Math.floor(dsecs); if (secs ==60 ){ secs=0; mins+=1 ; } if (mins ==60 ){ mins = 0 ; degs+=1; } if (degs ==360 ){ degs = 0; } String strdegs=new String().valueOf(degs); String strmins=new String().valueOf(mins); if (strmins.length()<2){ strmins="0"+strmins; } String strsecs=new String().valueOf(secs); if (strsecs.length()<2){ strsecs="0"+strsecs; } strAng=strdegs+":"+strmins+":"+strsecs; return strAng; } public double flIna(String dms)throws NumberFormatException{ double myrad=0; int myang[] = new int[3]; int cnt=0; int st=1; int ed=0; int sl; String tmp; dms=":"+ dms.trim() + ":"; sl = dms.length(); if(dms.length()<8){ throw new NumberFormatException(); } do{ ed = dms.indexOf(":",st); if (ed != -1){ tmp = dms.substring(st,ed); st = ed + 1; myang[cnt]=new Integer(tmp).intValue(); cnt++; } }while ((ed !=-1) && (ed != (dms.length()-1))); myrad = myang[0] + myang[1]/60.0 +myang[2]/3600.0; myrad =Math.PI *myrad/180.0; return myrad; } public void rect(double se,double sn,double dis, double rad){ teText.setText(flFix(se+dis*Math.sin(rad))); tnText.setText(flFix(sn+dis*Math.cos(rad))); } }