欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

歐氏距離java的代碼,歐幾里得算法java

歐氏距離怎么求?用matlab,謝謝

直接把坐標帶進去你采用的距離公式就行了。

創(chuàng)新互聯2013年至今,是專業(yè)互聯網技術服務公司,擁有項目成都網站建設、做網站網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元扶綏做網站,已為上家服務,為扶綏各地企業(yè)和個人服務,聯系電話: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個城市,距離計算方法為偽歐氏距離,最優(yōu)值為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;//當前節(jié)點

int j=0;//下一個節(jié)點

//默認從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();

//選擇下一個節(jié)點,要求不是已經走過,并且與i不同

j = selectmin(temp);

//找出下一節(jié)點

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;//當前節(jié)點指向下一節(jié)點

}

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

System.out.println("總距離為:" + s);

}

public int selectmin(int[] p){

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

//尋找第一個可用節(jié)點,注意最后一次尋找,沒有可用節(jié)點

while (colable[j] == 0) {

j++;

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

if(j=cityNum){

//沒有可用節(jié)點,說明已結束,最后一次為 *--0

m = p[0];

break;

//或者直接return 0;

}

else{

m = p[j];

}

}

//從可用節(jié)點J開始往后掃描,找出距離最小節(jié)點

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://chinadenli.net/article28/dsspecp.html

成都網站建設公司_創(chuàng)新互聯,為您提供網站設計微信小程序關鍵詞優(yōu)化面包屑導航做網站品牌網站制作

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

營銷型網站建設