0

我正在使用 xcode v. 4.5.1 并尝试使用 C++ 项目的距离公式 (sqrt( (x1-x2)^2 + (y1-y2)^2 )) 计算两点之间的距离,但对于某些原因我的价值观没有被平方。为什么会发生这种情况,我如何平方一个值?

这里的源是点对象的向量。我正在使用的向量是 (3,4) (6,8) (50,8) (11,7)。如果我 print source[i], source[i+1]or source[j]with .x()or.y()最后,它们都会正确打印出来,当我 print outsource[i].x()-source[i+1].x()等时,值是正确的。但是一旦我添加了“^2”,打印的值都是错误的。

例如,

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++^中是异或运算符,而不是平方运算符。请阅读您的 C++ 参考。

于 2013-01-29T03:36:48.747 回答
2

当您想通过幂来提高答案时,在您的情况下,您正在平方,您需要使用 pow 函数。

要了解有关该功能的更多信息,您可以在 Terminal.app 应用程序中键入“man pow”。

因此,对于一行,您可能希望将其更改为:

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 回答