JAVA:距离后方交会算法GUI实现
来源:互联网 发布:怎么打开ntfs for mac 编辑:程序博客网 时间:2024/04/27 15:11
编译环境:
操作系统: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;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"); final JTextField S_1 = new JTextField("200"); final JTextField S_2 = new JTextField("200"); final JTextField S_3 = new JTextField("200"); JPanel northPanel = new JPanel(); JPanel WestPanel = new JPanel(); JLabel pic= new JLabel(); pic.setIcon(new ImageIcon("G:/workplace/距离后方交会/4.png")); WestPanel.add(pic); getContentPane().add(WestPanel, BorderLayout.WEST); JPanel northPane2 = new JPanel(); //距离前方交会 northPane2.setLayout(new GridLayout(3, 4)); 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("S1: ", SwingConstants.CENTER)); northPane2.add(S_1); northPane2.add(new JLabel("S2: ", SwingConstants.CENTER)); northPane2.add(S_2); northPane2.add(new JLabel("S3: ", SwingConstants.CENTER)); northPane2.add(S_3); 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 S1=Double.valueOf(S_1.getText()).doubleValue(); Double S2=Double.valueOf(S_2.getText()).doubleValue(); Double S3=Double.valueOf(S_3.getText()).doubleValue(); //A、B、P Double D_AB=Math.sqrt(Math.pow((X1-X2),2)+Math.pow((Y1-Y2),2)); Double α_AB=Math.acos((D_AB*D_AB+S1*S1-S2*S2)/(2*D_AB*S1)); Double α_1=Math.atan(Math.abs(Y2-Y1)/Math.abs(X2-X1)); Double α_2=α_AB-α_1; Double XP1=X1+S1*Math.cos(α_2); Double YP1=Y1-S1*Math.sin(α_2); //B、C、P Double D_BC=Math.sqrt( Math.pow((X3-X2),2)+Math.pow((Y3-Y2),2)); Double α_BC=Math.acos((D_BC*D_BC+S2*S2-S3*S3)/(2*D_BC*S2)); Double α_3=Math.atan(Math.abs(Y3-Y2)/Math.abs(X3-X2)); Double α_4=α_BC-α_3; Double XP2=X1+S1*Math.cos(α_4); Double YP2=Y1-S1*Math.sin(α_4); textArea.append("=====距离后方交会===="+"\n"+"参考值1:"+ "( " +XP1+","+YP1+")" + "\n"+"参考值2:"+"( " +XP2+","+YP2+")" + "\n"+"误差距离约:"+Math.round(miss(XP1,YP1,XP2,YP2))+"米"); //textArea.append("测试:"+β_2); } 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
- JAVA:距离后方交会算法GUI实现
- JAVA:角度后方交会算法GUI实现
- JAVA:距离前方交会算法GUI实现
- JAVA:角度前方交会算法GUI实现
- 后方交会
- 空间后方交会
- 摄影测量后方交会
- 摄影测量学后方交会
- 摄影测量后方交会-前方交会(C#)
- 单片空间后方交会[C#]
- 摄影测量后方交会MATLAB
- 单张相片的后方交会
- 交会定点(前方交会、测边交会、后方交会)程序C++代码
- 空间距离交会
- 单片空间后方交会程序设计(代码共享)
- 共线方程求解外方位元素--单片空间后方交会
- 编辑距离算法的java实现
- 最小编辑距离算法JAVA实现
- python中if __name__ == '__main__': 的解析
- 如何返回字符串
- 正则表达式学习笔记
- Day13持久化存储——SQLite数据库存储(使用contentValue封装)
- ssh启动不了
- JAVA:距离后方交会算法GUI实现
- SpringMVC 源代码深度解析BeanWrapper及其实现
- ble学习笔记五------------独立按键查询方式
- ubuntu apt-get命令详解
- 安卓学习笔记:2:用EditView创建一个简单的注册页面
- SqlServer 监控发布中未分发的命令数
- ble学习笔记六------------温度传感器温度采集
- 学习vi和vim编辑器(4):快速移动位置
- 通过开源项目SoundTouch实现类似Tom猫的变声功能