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