我在配方方面遇到麻烦,程序运行正常,但答案似乎是错误的

时间:2015-10-27 17:35:34

标签: c++ visual-studio

以下程序应计算两点之间的距离:

header.h

class point{
private:
    double x, y, length;
public:
    point();
    point(double a, double b);

    int set_length(point,point);
};

header.cpp

#include<iostream>
#include"header.h"
#include<math.h> 
using namespace std;

point::point() :x(0), y(0) { }

point::point(double a, double b){
    x = a;
    y = b;
}

int point::set_length(point p1, point p2){

    length = sqrt(((p2.x - p1.x)*(p2.x - p1.x)) +
                  ((p2.y - p1.y)*(p2.y -p1.y)));
    return length;
}

的main.cpp

#include<iostream>
#include"header.h"
using namespace std;

int main(){
    point p1(4, 1);
    point p2(8, 2);

    point length;

    cout << length.set_length(p1, p2) << endl;
}

答案应该是3,但不是。

有人可以帮我实施距离公式吗?

2 个答案:

答案 0 :(得分:1)

您没有提供实际输出,但是,这里可能是错误的原因:

  1. 您使用的是类UNIX系统并且您没有向链接器提供-lm参数,因此数学库没有链接,您会得到奇怪的行为。如果您不在某些其他系统上链接数学库,也会遇到类似的问题。因此,请务必链接数学库。

  2. 您将从int返回point::set_lenghtdouble将从double进行投射 - 投射四舍五入,很可能是&#39截断。更改为返回glReadPixels()

  3. BTW,点(4,1)和(8,2)之间的距离 3.它类似于4.12310563。

答案 1 :(得分:0)

首先,您应该阅读有关file organization的内容。

关于你的代码,两点之间距离的公式,让我们说A(x 1 ,y 1 )和B(x 2 ,y 2 ):

enter image description here

在代码中看起来像:

int x1, x2, y1, y2;

Point A(x1, x2), B(y1, y2);

double distance = sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2));

powsqrt内部可能需要进行某些投射,因为坐标为int s。

在类point中,该函数应命名为double get_lenght(),以避免隐式转换返回的结果并使其有意义,因为您不是设置而是 距离。

附注:此函数不应该是类的一部分,因为它涉及类point中的两个点,它在逻辑上更适合于名为line的类。