public static void main(String args[]) {

          try{

            float point[]=new float[3];
Location loc = new Location(); //获得坐标
point[0] = 0;
point[1] = 0;
point[2] = (float) 0.5;
loc.set_point(point,1); point[0] = 0;
point[1] = -1;
point[2] = 2;
loc.set_point(point,2); point[0] = 0;
point[1] = 1;
point[2] = 0;
loc.set_point(point,3); point[0] = 1;
point[1] = 0;
point[2] = 3;
loc.set_point(point,4); //distance
loc.set_distance(1,1);
loc.set_distance(1,2);
loc.set_distance(2,3);
loc.set_distance(1,4); //calc
float x[] = loc.calc();
if (x == null)
{
System.out.println("fail");
}
else
{
System.out.println(x[0]+","+x[1]+","+ x[2]);
} } catch(Exception ex){
ex.printStackTrace();
} }
package com.qmall.location;

public class Location {

        //空间已知4点坐标
float p[][] = new float[4][3];
//空间已知4点距离
float d[] = new float[4] ; //初始化空间4点坐标
//p:坐标,数组
//num:1-4
void set_point(float point[],int num) throws Exception
{
int j = 0; for (j = 0;j < 3;j++)
{
p[num - 1][j] = point[j];
}
} //初始化空间4点距离
//distance:距离
//num:1-4
void set_distance(float distance,int num) throws Exception
{
d[num - 1] = distance;
} //计算未知点坐标
//p:计算后的返回值
//fail:back -1
float[] calc() throws Exception
{
float point[]=new float[3];
//矩阵A
float A[][] = new float[3][3];
//矩阵B
float B[]= new float[3];
int i = 0;
int j = 0; //初始化B矩阵
for (i = 0;i < 3;i++)
{
B[i] = (LocationMath.d_p_square(p[i + 1]) - LocationMath.d_p_square(p[i]) - (d[i + 1] * d[i + 1] - d[i] * d[i])) / 2;
} //初始化A矩阵
for (i = 0;i < 3;i++)
{
for (j = 0;j < 3;j++)
{
A[i][j] = p[i + 1][j] - p[i][j];
}
} //计算未知点坐标
point = LocationMath.solve(A,B); return point;
} }
package com.qmall.location;

public class LocationMath {

    public static void printf_matrix(float m[][]) throws Exception{
int i = 0;
int j = 0; for (i = 0;i < 3;i++)
{
for (j = 0;j < 3;j++)
{
System.out.println(m[i*3][j]);
}
} } //三维行列式的值
//m:3 * 3数组
public static double det(float m[][]) throws Exception{
double value = 0.0; value = m[0][0] * m[1][1] * m[2][2] +
m[0][1] * m[1][2] * m[2][0] +
m[0][2] * m[1][0] * m[2][1] -
m[0][1] * m[1][0] * m[2][2] -
m[0][2] * m[1][1] * m[2][0] -
m[0][0] * m[1][2] * m[2][1]; return value;
} //将一个行列式的值赋给另一个
//src,dst:3 * 3数组
public static void copy_matrix(float src[][],float dst[][]) throws Exception {
int i = 0;
int j = 0; for (i = 0;i < 3;i++)
{
for (j = 0;j < 3;j++)
{
dst[i][j] = src[i][j];
}
} } //解方程
//m:方阵,3 * 3数组
//b:解
//x:返回值
//fail:back -1
public static float[] solve(float m[][],float b[]) throws Exception { float det_m;
float det_m_temp;
float m_temp[][] = new float[3][3];
int i = 0;
int j = 0; float x[]=new float[3]; det_m = (float) det(m);
if (det_m == 0)
{
return null;
}
for (j = 0;j < 3;j++)
{
//得到新的行列式
copy_matrix(m,m_temp);
for (i = 0;i < 3;i++)
{
m_temp[i][j] = b [i];
}
det_m_temp = (float) det(m_temp); //求解
x[j] = det_m_temp / det_m;
} return x; } //计算空间点到原点距离的平方
public static float d_p_square(float p[]) throws Exception { float d = 0;
int i = 0; for (i = 0;i < 3;i++)
{
d += p[i] * p [i];
} return d; } }

java 空间四点定位,可跟据已知的四点坐标(x,y,z)及距离计算所在位置坐标的更多相关文章

  1. matlab 已知函数值纵坐标值(Y值)获得对应的横坐标

    clear all;clc; x=-pi/2:pi/50:pi; y=sin(x); plot(x,y); grid on; fm=max(y) id=find(y==fm); xm=x(id) 转自 ...

  2. Java集合-5. (List)已知有一个Worker 类如下: 完成下面的要求 1) 创建一个List,在List 中增加三个工人,基本信息如下: 姓名 年龄 工资 zhang3 18 3000 li4 25 3500 wang5 22 3200 2) 在li4 之前插入一个工人,信息为:姓名:zhao6,年龄:24,工资3300 3) 删除wang5 的信息 4) 利用for 循

    第六题 5. (List)已知有一个Worker 类如下: public class Worker { private int age; private String name; private do ...

  3. 无法为数据库 XXX 中的对象XXX 分配空间,因为 'PRIMARY' 文件组已满。请删除不需要的文件、删除文件组中的对象、将其他文件添加到文件组或为文件组中的现有文件启用自动增长,以便增加可用磁盘空间。

    无法为数据库 XXX 中的对象XXX 分配空间,因为 'PRIMARY' 文件组已满.请删除不需要的文件.删除文件组中的对象.将其他文件添加到文件组或为文件组中的现有文件启用自动增长,以便增加可用磁盘 ...

  4. 未能为数据库 '*'中得对象'*'分配空间,因文件组'PRIMARY'已满

    服务器使用mssqlserver2005,最近经常出现无法新增信息错误,查看日志,发现严重错误提示,内容大致为: 无法为数据库 'weixin_main' 中的对象 'dbo.wx_logs'.'PK ...

  5. Java程序性能定位工具-火焰图

    Java程序性能定位工具-火焰图 前言 Java火焰图是一种新的查看CPU利用率方式.今天就带大家一起使用来自Google大神的工具来生成火焰图.火焰图非常的直观,问题一目了然,希望有一天它能成为JA ...

  6. Java编写画图板程序细节-保存已画图形

    没有Java编写画图板程序细节-保存已画图形   一.为何我们要保存画图板上已画图形呢? 有很多人会问,为什么我们一定要保存画图板上已经画好了的图形呢?原因很简单.当我们在画图板上画完自己想画的图形后 ...

  7. 已知问题汇总 (2013-11-30) - QQ空间, EXTJS

    目前发现两个已知问题暂时无法得到解决: 1. QQ空间问题. 打开页面 http://user.qzone.qq.com/822994792/311, 点击 "xxx人赞" 这个链 ...

  8. java基础 File与递归练习 使用文件过滤器筛选将指定文件夹下的小于200K的小文件获取并打印按层次打印(包括所有子文件夹的文件) 多层文件夹情况统计文件和文件夹的数量 统计已知类型的数量 未知类型的数量

    package com.swift.kuozhan; import java.io.File; import java.io.FileFilter; /*使用文件过滤器筛选将指定文件夹下的小于200K ...

  9. java面试题:已知一个数组[2,4,6,2,1,5],将该数组进行排序(降序,不能用工具类进行排序),创建两条线程交替输出排序后的数组,线程名自定义

    package com.swift; import java.util.Arrays; import java.util.Comparator; public class ArrayThread_Te ...

随机推荐

  1. MongoDB(六):使用C#代码连接并读取MongoDB数据库

    在上篇文章中,讲解了MongoDB的基本操作,包括增.删.改.查,但是这些操作都是在命令行模式下进行的,这篇文章中讲解如何使用C#程序连接到MongoDB数据库,并且读取里面的文档. 一.新建项目 新 ...

  2. FastDFS - 文件服务器学习资料

    FastDFS搭建及java整合代码 CentOS 6.5下 FastDFS结合Nginx插件实现图片http访问 图片服务器fastDFS的搭建以及配置 nginx fastdfs 配置后 上传成功 ...

  3. Framework 7 之 给Picker Modal 添加半透明背景

    官网的效果图如下: 效果图如下: 我们需要在显示下面浮层的时候显示后面的半透明背景,Framework 7 里面默认有个半透明背景,如下图: 解决方案: 1.在</body>标签之前添加& ...

  4. larave框架的安装

    (1)中文官网:http://www.golaravel.com/ (2)composer下载与安装 1:composer网址:getcomposer.org 2:windows下载Composer- ...

  5. OSX下git diff/merge 可视化工具 P4Merge 环境配置步骤

    先下载 step1:首先,把要运行的命令放入外部包装脚本中,创建一个merge包装脚本,名字叫做extMerge,让它带参数调用P4Merge. $ cat >> /usr/local/b ...

  6. 《FPGA全程进阶---实战演练》第二章之硬件平台的搭建

    学习FPGA,多多少少应该要懂得硬件电路的设计,这样不单单增加了自己的技能,而且还能够对FPGA的硬件实现有更好的了解. 1 模块划分 对于一个基本的FPGA硬件平台,常用的几个电路部分:(1)电源电 ...

  7. Maven学习日记(二)---MAVEN创建多模块的项目

    手动构建多模块maven项目,这个simple-parent项目下有两个子模块,一个是jar包型的simple-weather和一个war型的simple-webapp1.创建一个父的simple-p ...

  8. 从零开始,制定PHP学习计划

    7月份学习计划1-15 搭建开发环境.做个小demo 增删改查.Mysql数据库16-30号 架构设计.服务器管理.版本控制 8月份正式入手项目jquery脚本学习Thinksns开源学习.核心业务学 ...

  9. Xshell和SecureCRT等SSH下使用Tmux及Byobu(解决Byobu被statusline信息面板刷屏问题)

    Vim的vsplit用得爽吧!多命令行模式,同样让你爽得不蛋疼! 下面介绍一下两个终端多控制台软件:Tmux 和 Byobu!本文还是以Xshell为主进行介绍! --------------Tmux ...

  10. 科技发烧友之3d吉米投影

    http://item.jd.com/1558081.html?r=1434635270480#comment 暴风199的墨镜