网站建设资讯

NEWS

网站建设资讯

欧氏距离java的代码,欧几里得算法java

欧氏距离怎么求?用matlab,谢谢

直接把坐标带进去你采用的距离公式就行了。

创新互联2013年至今,是专业互联网技术服务公司,拥有项目成都网站建设、做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元扶绥做网站,已为上家服务,为扶绥各地企业和个人服务,联系电话:18980820575

最简单的是二维的的欧式距离公式。举个例子吧

a=[1,2];

b=[2,1];

juli=sqrt((a(1)-b(1))^2+(a(2)-b(2))^2);

java 求两点间距离的问题

两维空间里,两点间的距离公式是L = sqrt((x1-x2)^2+(y1-y2)^2);

多维空间的公式照推。

假设文件中数据如下:

3

2,5,6

6,8,5

则对应的代码如下:

BufferedReader reader = new BufferedReader(new FileReader("C:/test.txt"));

//获取维数

String s1 = reader.readLine();

num = Integer.parseInt(s1);

//获取第一个坐标的信息,将其坐标信息保存在数组中

String s2 = reader.readLine();

String[]str2 = s2.split(",");

int p1[] =new int[num];

for(int i=0;inum;i++) {

p1[i] = Integer.parseInt(str2[i]);

}

//获取第二个坐标的信息,同上,略过

……

//将对应坐标之差保存到另外一个数组

int a []=new int[num];

for(int i = 0;inum;i++)

a[i] = p1[i]-p2[i];

//求这个数组各元素的平方和

int sum = 0;

for(int i=0;inum;i++) {

sum += a[i]*a[i];

}

求距离

int L = Math.sqrt(sum);

以上代码直接在浏览器中完成,可能会有编码问题,楼主细察

用java解决tsp问题用什么算法最简单

package noah;

import java.io.BufferedReader;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStreamReader;

public class TxTsp {

private int cityNum; // 城市数量

private int[][] distance; // 距离矩阵

private int[] colable;//代表列,也表示是否走过,走过置0

private int[] row;//代表行,选过置0

public TxTsp(int n) {

cityNum = n;

}

private void init(String filename) throws IOException {

// 读取数据

int[] x;

int[] y;

String strbuff;

BufferedReader data = new BufferedReader(new InputStreamReader(

new FileInputStream(filename)));

distance = new int[cityNum][cityNum];

x = new int[cityNum];

y = new int[cityNum];

for (int i = 0; i cityNum; i++) {

// 读取一行数据,数据格式1 6734 1453

strbuff = data.readLine();

// 字符分割

String[] strcol = strbuff.split(" ");

x[i] = Integer.valueOf(strcol[1]);// x坐标

y[i] = Integer.valueOf(strcol[2]);// y坐标

}

data.close();

// 计算距离矩阵

// ,针对具体问题,距离计算方法也不一样,此处用的是att48作为案例,它有48个城市,距离计算方法为伪欧氏距离,最优值为10628

for (int i = 0; i cityNum - 1; i++) {

distance[i][i] = 0; // 对角线为0

for (int j = i + 1; j cityNum; j++) {

double rij = Math

.sqrt(((x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j])

* (y[i] - y[j])) / 10.0);

// 四舍五入,取整

int tij = (int) Math.round(rij);

if (tij rij) {

distance[i][j] = tij + 1;

distance[j][i] = distance[i][j];

} else {

distance[i][j] = tij;

distance[j][i] = distance[i][j];

}

}

}

distance[cityNum - 1][cityNum - 1] = 0;

colable = new int[cityNum];

colable[0] = 0;

for (int i = 1; i cityNum; i++) {

colable[i] = 1;

}

row = new int[cityNum];

for (int i = 0; i cityNum; i++) {

row[i] = 1;

}

}

public void solve(){

int[] temp = new int[cityNum];

String path="0";

int s=0;//计算距离

int i=0;//当前节点

int j=0;//下一个节点

//默认从0开始

while(row[i]==1){

//复制一行

for (int k = 0; k cityNum; k++) {

temp[k] = distance[i][k];

//System.out.print(temp[k]+" ");

}

//System.out.println();

//选择下一个节点,要求不是已经走过,并且与i不同

j = selectmin(temp);

//找出下一节点

row[i] = 0;//行置0,表示已经选过

colable[j] = 0;//列0,表示已经走过

path+="--" + j;

//System.out.println(i + "--" + j);

//System.out.println(distance[i][j]);

s = s + distance[i][j];

i = j;//当前节点指向下一节点

}

System.out.println("路径:" + path);

System.out.println("总距离为:" + s);

}

public int selectmin(int[] p){

int j = 0, m = p[0], k = 0;

//寻找第一个可用节点,注意最后一次寻找,没有可用节点

while (colable[j] == 0) {

j++;

//System.out.print(j+" ");

if(j=cityNum){

//没有可用节点,说明已结束,最后一次为 *--0

m = p[0];

break;

//或者直接return 0;

}

else{

m = p[j];

}

}

//从可用节点J开始往后扫描,找出距离最小节点

for (; j cityNum; j++) {

if (colable[j] == 1) {

if (m = p[j]) {

m = p[j];

k = j;

}

}

}

return k;

}

public void printinit() {

System.out.println("print begin....");

for (int i = 0; i cityNum; i++) {

for (int j = 0; j cityNum; j++) {

System.out.print(distance[i][j] + " ");

}

System.out.println();

}

System.out.println("print end....");

}

public static void main(String[] args) throws IOException {

System.out.println("Start....");

TxTsp ts = new TxTsp(48);

ts.init("c://data.txt");

//ts.printinit();

ts.solve();

}

}

知道一个数利用欧式距离用java如何产生下一个数

我看了三遍 没太清楚你的意思 你知道一个数 利用欧氏距离 用java产生下一个数。

该逗号还是逗号,改分句还是分句,程序的世界,本来就需要很清楚的阐述问题。

用java写:求地球上任意两个点之间的距离,知道这两个点的经纬度

距离可以用r*arccos[cos(y1)*cos(y2)*cos(x1x2)+sin(y1)*sin(y2)]来算

r是地球半径6370km,x是经度,y是纬度

注意角度单位的转换。Math类里的sin和cos函数的参数是以弧度为单位的角度,所以x1、x2、y1、y2要用弧度表示,但一般经纬度都是用角度表示(如X1=120 东经120度)就要化成弧度(x1*Pi/180)

而acos函数返回值正好是以弧度为单位的,刚好符合要求

如果你的代码里的lat1、lat2、lon1、lon2单位是角度,可以这么改

double radius=6371000;

double distance=radius*Math.acos((Math.cos(lat2*Math.PI/180)*Math.cos(lat2*Math.PI/180)*Math.cos(lon1*Math.PI/180-lon2*Math.PI/180)+Math.sin(lat1*Math.PI/180)*Math.sin(lat2*Math.PI/180)));

我算出来是903.9千米


网页标题:欧氏距离java的代码,欧几里得算法java
分享路径:http://njwzjz.com/article/dsspecp.html