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

编译环境:

操作系统: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工程包

时间: 2024-08-27 00:49:23

JAVA:距离前方交会算法GUI实现的相关文章

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

编译环境: 操作系统:Win8.1  64位 IDE平台:Visual Studio 2013 Ultimate 一.原理 在待测点P上观测距离距离S1,S2,S3,进而确定P的平面坐标: 二.代码实现 距离后方交会.java package text; import java.awt.*; import java.awt.event.*; import java.math.*; import javax.swing.*; import javax.swing.border.Border; pu

JAVA:角度前方交会算法GUI实现

编译环境: 操作系统: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; public class 角度前方交会 extends JFra

java通过经纬度计算两个点的之间的距离的算法

通过两个点的经纬度计算距离 从google maps的脚本里扒了段代码,没准啥时会用上.大家一块看看是怎么算的.private const double EARTH_RADIUS = 6378.137;private static double rad(double d){   return d * Math.PI / 180.0;} public static double GetDistance(double lat1, double lng1, double lat2, double ln

java数据结构与算法之顺序表与链表深入分析

转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/52953190 出自[zejian的博客] 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 ??数据结构与算法这门学科虽然在大学期间就已学习过了,但是到现在确实也忘了不少,因此最近又重新看了本书-<数据结构与算法分析>加上之前看的<java数据结构>也算是对数据结构的进一步深入学习了,于是也就打算

java希尔排序算法

原文:java希尔排序算法 代码下载地址:http://www.zuidaima.com/share/1550463279090688.htm 希尔排序算法的基本思想是:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组.所有距离为dl的倍数的记录放在同一个组中.先在各组内进行直接插人排序:然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<-<d2<d1),即所有记录放在同一组中进行直接插入排序为止.该方法实质上是一种

Java实现KMP算法

转自:http://blog.csdn.net/tkd03072010/article/details/6824326 —————————————————————————————————— package arithmetic; /** * Java实现KMP算法 * * 思想:每当一趟匹配过程中出现字符比较不等,不需要回溯i指针, * 而是利用已经得到的“部分匹配”的结果将模式向右“滑动”尽可能远 * 的一段距离后,继续进行比较. * * 时间复杂度O(n+m) * * @author xqh

《Java数据结构和算法》- 哈希表

Q: 如何快速地存取员工的信息? A: 假设现在要写一个程序,存取一个公司的员工记录,这个小公司大约有1000个员工,每个员工记录需要1024个字节的存储空间,因此整个数据库的大小约为1MB.一般的计算机内存都可以满足. 为了尽可能地存取每个员工的记录,使用工号从1(公司创业者)到1000(最近雇佣的工人).将工号作为关键字(事实上,用其他作为关键字完全没有必要).即使员工离职不在公司,他们的记录也是要保存在数据库中以供参考,在这种情况下需要使用什么数据结构呢? A: 一种可能使用数组,每个员工

java每日小算法(27)

/* [程序27]  题目:求100之内的素数    */ package test; import java.util.Scanner; public class test { public static boolean prime(int number) { boolean flag = true; int mid = (int)Math.sqrt(number); for(int i = 2; i< mid+1; i++) { if(number % i == 0) { flag = fa

java每日小算法(4)

[程序4] 题目:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5. 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可. (2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步. (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步. package test; import java.util.ArrayList;