以下程序应计算两点之间的距离:
class point{
private:
double x, y, length;
public:
point();
point(double a, double b);
int set_length(point,point);
};
#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;
}
#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
,但不是。
有人可以帮我实施距离公式吗?
答案 0 :(得分:1)
您没有提供实际输出,但是,这里可能是错误的原因:
您使用的是类UNIX系统并且您没有向链接器提供-lm
参数,因此数学库没有链接,您会得到奇怪的行为。如果您不在某些其他系统上链接数学库,也会遇到类似的问题。因此,请务必链接数学库。
您将从int
返回point::set_lenght
,double
将从double
进行投射 - 投射不四舍五入,很可能是&#39截断。更改为返回glReadPixels()
。
BTW,点(4,1)和(8,2)之间的距离不 3.它类似于4.12310563。
答案 1 :(得分:0)
首先,您应该阅读有关file organization的内容。
关于你的代码,两点之间距离的公式,让我们说A(x 1 ,y 1 )和B(x 2 ,y 2 ):
在代码中看起来像:
int x1, x2, y1, y2;
Point A(x1, x2), B(y1, y2);
double distance = sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2));
在pow
或sqrt
内部可能需要进行某些投射,因为坐标为int
s。
在类point
中,该函数应命名为double get_lenght()
,以避免隐式转换返回的结果并使其有意义,因为您不是设置而是 距离。
附注:此函数不应该是类的一部分,因为它涉及类point
中的两个点,它在逻辑上更适合于名为line
的类。