java 空间四点定位,可跟据已知的四点坐标(x,y,z)及距离计算所在位置坐标
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)及距离计算所在位置坐标的更多相关文章
- 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) 转自 ...
- 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 ...
- 无法为数据库 XXX 中的对象XXX 分配空间,因为 'PRIMARY' 文件组已满。请删除不需要的文件、删除文件组中的对象、将其他文件添加到文件组或为文件组中的现有文件启用自动增长,以便增加可用磁盘空间。
无法为数据库 XXX 中的对象XXX 分配空间,因为 'PRIMARY' 文件组已满.请删除不需要的文件.删除文件组中的对象.将其他文件添加到文件组或为文件组中的现有文件启用自动增长,以便增加可用磁盘 ...
- 未能为数据库 '*'中得对象'*'分配空间,因文件组'PRIMARY'已满
服务器使用mssqlserver2005,最近经常出现无法新增信息错误,查看日志,发现严重错误提示,内容大致为: 无法为数据库 'weixin_main' 中的对象 'dbo.wx_logs'.'PK ...
- Java程序性能定位工具-火焰图
Java程序性能定位工具-火焰图 前言 Java火焰图是一种新的查看CPU利用率方式.今天就带大家一起使用来自Google大神的工具来生成火焰图.火焰图非常的直观,问题一目了然,希望有一天它能成为JA ...
- Java编写画图板程序细节-保存已画图形
没有Java编写画图板程序细节-保存已画图形 一.为何我们要保存画图板上已画图形呢? 有很多人会问,为什么我们一定要保存画图板上已经画好了的图形呢?原因很简单.当我们在画图板上画完自己想画的图形后 ...
- 已知问题汇总 (2013-11-30) - QQ空间, EXTJS
目前发现两个已知问题暂时无法得到解决: 1. QQ空间问题. 打开页面 http://user.qzone.qq.com/822994792/311, 点击 "xxx人赞" 这个链 ...
- java基础 File与递归练习 使用文件过滤器筛选将指定文件夹下的小于200K的小文件获取并打印按层次打印(包括所有子文件夹的文件) 多层文件夹情况统计文件和文件夹的数量 统计已知类型的数量 未知类型的数量
package com.swift.kuozhan; import java.io.File; import java.io.FileFilter; /*使用文件过滤器筛选将指定文件夹下的小于200K ...
- java面试题:已知一个数组[2,4,6,2,1,5],将该数组进行排序(降序,不能用工具类进行排序),创建两条线程交替输出排序后的数组,线程名自定义
package com.swift; import java.util.Arrays; import java.util.Comparator; public class ArrayThread_Te ...
随机推荐
- Web API(四):Web API参数绑定
在这篇文章中,我们将学习Web API如何将HTTP请求数据绑定到一个操作方法的参数中. 操作方法在Web API控制器中可以有一个或多个不同类型的参数.它可以是基本数据类型或复杂类型.Web API ...
- MongoDB(四):MongoDB连接和创建数据库
在连接MongoDB前确保启动MongoDB服务,只需要在MongoDB安装目录的bin目录下执行mongo.exe即可. 执行启动操作后,mongodb在输出一些必要信息后不会输出任何信息,之后就等 ...
- java分布式集群
http://blog.csdn.net/guzicheng/article/details/11580841
- Linux make语法补充
"-"表示此条命令出错,make也会继续执行后续的命令.如:"-rm main.o" 内置变量$@表示生成目标 内置变量$^表示所有依赖 内置变量$<表示 ...
- 关于Jsp中的三种弹框
对话框有三种 1:只是提醒,不能对脚本产生任何改变: 2:一般用于确认,返回 true 或者 false ,所以可以轻松用于 if...else...判断 3:一个带输入的对话框,可以返回用户填入的字 ...
- C++函数的高级特性
对比于 C 语言的函数,C++增加了重载(overloaded).内联(inline).const 和 virtual 四种新机制.其中重载和内联机制既可用于全局函数也可用于类的成员函数,const ...
- linux -- 管道“|”
利用Linux所提供的管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入.连续使用管道意味着第一个命令的输出会作为 第二个命令的输入,第二个命令的输出又会作为第三个命令的输入 ...
- hdu 4463 Outlets
#include<bits/stdc++.h> using namespace std; double x[100+5],y[100+5]; double e[100+5][100+5]; ...
- js使用正则表达式从url中获取参数值
//从url中获取参数值 function getvl(name) { var reg = new RegExp("(^|\\?|&)"+ name +"=([^ ...
- oracle中如何把结果集插入临时表中
比如临时表叫temp,你要查询的语句为select * from 表名 where id=1. 1.建表temp 2.插入语句: ; commit;