0

私は 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] );
                }
            }
        }
    }
4

2 に答える 2

2

C++ では^、二乗演算子ではなく排他的 OR 演算子です。C++ リファレンスをお読みください。

于 2013-01-29T03:36:48.747 に答える
2

答えをべき乗で上げたい場合 (あなたの場合は 2 乗)、 pow 関数を使用する必要があります。

この関数の詳細については、Terminal.app アプリケーションで「man pow」と入力してください。

したがって、1 行を次のように変更できます。

double d1 = sqrt(
    pow ( (source[i].x()-source[i+1].x()), 2 ) 
    + 
    pow( (source[i].y()-source[i+1].y()), 2 ) );
于 2013-01-29T03:36:57.847 に答える