一个关于空间的简单算法题,该如何解决

一个关于空间的简单算法题
写出一个函数用来判断一个点到一个平面的关系。输入一个点和一个面,返回该点在面的前面,后面,还是在这个面上?(要求自定义这个点的数据结构,以及这个面的数据结构,用一个点和法向量来表示平面。)

一个朋友问到的一个题,没什么好想法,求助大家。



------解决方案--------------------
定义一个Point结构包含x,y,z三个坐标,用来存储三维空间中的点
一个平面的数据结构就包含一个Point和一个法向量,这个法向量也是Point类型的
给一个平面的结构,你需要一个方法算出平面的方程ax+by+cz=0,这个很容易
然后把你要判断的点带入平面方程,根据得到值的符号来判断,一共就3种情况,大于0,小于0,等于0
------解决方案--------------------
平面用法向和到原点的距离表示最简单,操作也最方便
C/C++ code

class Vec3d
{
public:
  Vec3d(const double& x, const double& y, const double& z)
  {
     this->x = x;
     this->y = y;
     this->z = z;
  }
  const double Dot(const Vec3d& point) const
  {
     return x*point.x + y*point.y + z*point.z;
  }
private:
  double x, y, z;
}
class Plane3d
{
public: 
Plane3d(const Vec3d& normal, double D)
{
   this->normal = normal;
   this->distance = D;
}
const double GetDistance(const Vec3d& point) const
{
   point.Dot(normal) - distance;
}

private:
   Vec3d normal;
   double distance;
}