JAVA:距离前方交会算法GUI实现

来源:互联网 发布:批量编辑图片的软件 编辑:程序博客网 时间:2024/04/27 15:26

编译环境:

操作系统:Win8.1  64位

IDE平台:Visual Studio 2013 Ultimate

一、原理与步骤


二、代码实现

距离前方交会.java

package text;import java.awt.*;import java.awt.event.*;import java.math.*;import javax.swing.*;import javax.swing.border.Border;/** * A frame with sample text components. */public class 距离前方交会 extends JFrame{   public static final int TEXTAREA_ROWS = 20;   public static final int TEXTAREA_COLUMNS = 40;    public 距离前方交会()   {      final JTextField A_X = new JTextField("37477");      final JTextField A_Y = new JTextField("16307");      final JTextField B_X = new JTextField("37327");      final JTextField B_Y = new JTextField("16078");          final JTextField C_X = new JTextField("37163");      final JTextField C_Y = new JTextField("16046");      JPanel northPanel = new JPanel();      final JTextField DAP = new JTextField("200");      final JTextField DBP = new JTextField("200");      final JTextField DCP = new JTextField("200");      JPanel WestPanel = new JPanel();      JLabel pic= new JLabel();      pic.setIcon(new ImageIcon("G:/workplace/距离前方交会/2.png"));      WestPanel.add(pic);      getContentPane().add(WestPanel, BorderLayout.WEST);      JPanel northPane2 = new JPanel();    //距离前方交会          northPane2.setLayout(new GridLayout(3, 8));          northPane2.add(new JLabel("A_X: ", SwingConstants.CENTER));          northPane2.add(A_X);          northPane2.add(new JLabel("A_Y: ", SwingConstants.CENTER));          northPane2.add(A_Y);          northPane2.add(new JLabel("B_X: ", SwingConstants.CENTER));          northPane2.add(B_X);          northPane2.add(new JLabel("B_Y: ", SwingConstants.CENTER));          northPane2.add(B_Y);          northPane2.add(new JLabel("C_X: ", SwingConstants.CENTER));          northPane2.add(C_X);          northPane2.add(new JLabel("C_Y: ", SwingConstants.CENTER));          northPane2.add(C_Y);          northPane2.add(new JLabel("DAP: ", SwingConstants.CENTER));          northPane2.add(DAP);          northPane2.add(new JLabel("DBP: ", SwingConstants.CENTER));          northPane2.add(DBP);          northPane2.add(new JLabel("DCP: ", SwingConstants.CENTER));          northPane2.add(DCP);      Border etched = BorderFactory.createEtchedBorder();      Border titled = BorderFactory.createTitledBorder(etched, "距离前方交会");      northPanel.setBorder(titled);      getContentPane().add(northPane2, BorderLayout.NORTH);            final JTextArea textArea = new JTextArea(20,40);      JScrollPane scrollPane = new JScrollPane(textArea);      getContentPane().add(scrollPane, BorderLayout.CENTER);      // add button to append text into the text area      JPanel southPanel = new JPanel();      JButton insertButton = new JButton("计算P点坐标");      insertButton.addActionListener(new ActionListener()         {            public void actionPerformed(ActionEvent event)            {          //坐标初始化                Double X1=Double.valueOf(A_X.getText()).doubleValue();                Double Y1=Double.valueOf(A_Y.getText()).doubleValue();                Double X2=Double.valueOf(B_X.getText()).doubleValue();                Double Y2=Double.valueOf(B_Y.getText()).doubleValue();                Double X3=Double.valueOf(C_X.getText()).doubleValue();                Double Y3=Double.valueOf(C_Y.getText()).doubleValue();                Double D_AP=Double.valueOf(DAP.getText()).doubleValue();                Double D_BP=Double.valueOf(DBP.getText()).doubleValue();                Double D_CP=Double.valueOf(DCP.getText()).doubleValue();                          //A、B、P                  Double D_AB=Math.sqrt( Math.pow((X1-X2),2)+Math.pow((Y1-Y2),2));                Double α_BAP=Math.acos((D_AB*D_AB+D_AP*D_AP-D_BP*D_BP)/(2*D_AB*D_AP));                //Double α_ABP=Math.acos((D_AB*D_AB+D_BP*D_BP-D_AP*D_AP)/2*D_AB*D_BP);                Double α_AB=90-Math.atan(Math.abs(Y2-Y1)/Math.abs(X2-X1));                Double α_AP=α_AB-α_BAP;                Double XP1=X1+D_AP*Math.cos(α_AP);                Double YP1=Y1+D_AP*Math.sin(α_AP);                          //B、C、P                Double D_BC=Math.sqrt( Math.pow((X3-X2),2)+Math.pow((Y3-Y2),2));                Double α_CBP=Math.acos((D_BC*D_BC+D_BP*D_BP-D_CP*D_CP)/(2*D_BC*D_BP));                //Double α_BCP=Math.acos((D_BC*D_BC+D_CP*D_CP-D_BP*D_BP)/2*D_BC*D_CP);                Double α_BC=90-Math.atan(Math.abs(Y2-Y3)/Math.abs(X2-X3));                Double α_BP=α_BC-α_CBP;                Double XP2=X1+D_BP*Math.cos(α_BP);                Double YP2=Y1+D_BP*Math.sin(α_BP);                                 textArea.append("=====距离前方交会===="+"\n"+"参考值1:"+ "( " +XP1+","+YP1+")"                        +  "\n"+"参考值2:"+"( " +XP2+","+YP2+")"                        +  "\n"+"误差距离约:"+Math.round(miss(XP1,YP1,XP2,YP2))+"米");            }            public double miss(double XP1,double YP1,double XP2,double YP2){                return Math.sqrt(Math.pow((XP1-XP2),2)+Math.pow((YP1-YP2),2));            }            public double convert(String input){                Double a=Double.valueOf(input.split("°")[0]).doubleValue();                Double b=Double.valueOf(input.split("°")[1].split("'")[0]).doubleValue();                return a+b/60;            }         });     add(insertButton, BorderLayout.SOUTH);      pack();   }}

Test.java

package text;import java.awt.*;import javax.swing.*;public class Test{   public static void main(String[] args)   {      EventQueue.invokeLater(new Runnable()         {            public void run()            {               JFrame frame = new 距离前方交会();               frame.setTitle("距离前方交会");               frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);               frame.setVisible(true);            }         });   }}

三、运行结果



下载:距离前方交会算法JAVA工程包



0 0
原创粉丝点击