私は xcode v. 4.5.1 を使用しており、距離式 (sqrt( (x1-x2)^2 + (y1-y2)^2 )) を使用して 2 点間の距離を計算しようとしていますが、C++ プロジェクトでは私の値が二乗されていない理由。これはなぜですか? また、値を 2 乗するにはどうすればよいですか?
ここでのsourceは、ポイント オブジェクトのベクトルです。私が扱っているベクトルは (3,4) (6,8) (50,8) (11,7) です。を印刷する場合source[i]
、または最後にsource[i+1]
またはsource[j]
一緒に印刷すると、それらはすべて適切に印刷され、印刷するときなどは値が正しいです。しかし、「^2」を追加すると、出力される値はすべて間違っています。.x()
.y()
source[i].x()-source[i+1].x()
例えば、
cout<< source[i].y(); shows 4 8 8 7 (when looped over i)
しかし
cout<< sqrt((source[i].x()-source[i+1].x())^2 + (source[i].y()-source[i+1].y())^2);
i=1 のとき 1 を示す
これが私のインクルードです:
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include "Point.h"
値を二乗しないコードの部分は次のとおりです。
void function(vector<Point>& source){
if(source.size()>3){
for(int i=0; i<n+2; i++){
for(int j=i+2; j<n; j++){
double d1 = sqrt((source[i].x()-source[i+1].x())^2 + (source[i].y()-source[i+1].y())^2);
double d2 = sqrt((source[i].x()-source[j].x())^2 + (source[i].y()-source[j].y())^2);
if( d1 > d2){
swap( source[i+1], source[j] );
}
}
}
}