請參考下面的代碼:
#include?<stdlib.h>#include?<iostream>
#include?"math.h"
class?XYZ
{
public:
XYZ(double?x,?double?y,?double?z){_x?=?x;?_y?=?y;?_z?=?z;}
double?getX()?const{return?_x;}
double?getY()?const{return?_y;}
double?getZ()?const{return?_z;}
private:
double?_x;
double?_y;
double?_z;
};
class?Plane
{
public:
Plane(double?A,?double?B,?double?C,?double?D){
_A?=?A;
_B?=?B;
_C?=?C;
_D?=?D;
}
double?getDis(XYZ?pt){
return?(_A?*?pt.getX()?+?_B?*?pt.getY()?+?_C?*?pt.getZ()?+?_D)/(sqrt(_A?*?_A?+?_B?*?_B?+?_C?*?_C));
}
XYZ?getPtPjt(XYZ?pt){
double?k?=?-1?*?getDis(pt)?/?sqrt(_A?*?_A?+?_B?*?_B?+?_C?*?_C);
double?x?=?pt.getX()?+?k?*?_A;
double?y?=?pt.getY()?+?k?*?_B;
double?z?=?pt.getZ()?+?k?*?_C;
return?XYZ(x,?y,?z);
}
private:
double?_A;
double?_B;
double?_C;
double?_D;
};
int?main(int?argc,?void*?argv[])
{
XYZ?pt1?=?XYZ(-1.0,?0.0,?1.0);
XYZ?pt2?=?XYZ(0.0,?0.0,?-5.0);
Plane?p?=?Plane(1.1,?2.2,?3.3,?4.4);
std::cout?<<?p.getDis(pt1)?<<?std::endl;
std::cout?<<?"("?<<?p.getPtPjt(pt2).getX()?<<?",?"<<?p.getPtPjt(pt2).getY()?<<?",?"?<<?p.getPtPjt(pt2).getZ()?<<?")"?<<?std::endl;
system("pause");
}