一个关于空间的简单算法题
写出一个函数用来判断一个点到一个平面的关系。输入一个点和一个面,返回该点在面的前面,后面,还是在这个面上?(要求自定义这个点的数据结构,以及这个面的数据结构,用一个点和法向量来表示平面。)
一个朋友问到的一个题,没什么好想法,求助大家。
[解决办法]
定义一个Point结构包含x,y,z三个坐标,用来存储三维空间中的点
一个平面的数据结构就包含一个Point和一个法向量,这个法向量也是Point类型的
给一个平面的结构,你需要一个方法算出平面的方程ax+by+cz=0,这个很容易
然后把你要判断的点带入平面方程,根据得到值的符号来判断,一共就3种情况,大于0,小于0,等于0
[解决办法]
平面用法向和到原点的距离表示最简单,操作也最方便
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;}