C++ 实现三维解析几何:点、线和平面
#include
class Point { private: double x, y, z; public: Point(double _x, double _y, double _z) : x(_x), y(_y), z(_z) {}
double distanceTo(Point p) {
double dx = x - p.x;
double dy = y - p.y;
double dz = z - p.z;
return sqrt(dx*dx + dy*dy + dz*dz);
}
};
class Line { private: Point p1, p2; public: Line(Point _p1, Point _p2) : p1(_p1), p2(_p2) {}
double distanceTo(Point p) {
double dx = p2.x - p1.x;
double dy = p2.y - p1.y;
double dz = p2.z - p1.z;
double dpx = p.x - p1.x;
double dpy = p.y - p1.y;
double dpz = p.z - p1.z;
double t = (dpx*dx + dpy*dy + dpz*dz) / (dx*dx + dy*dy + dz*dz);
double nearestX = p1.x + t*dx;
double nearestY = p1.y + t*dy;
double nearestZ = p1.z + t*dz;
return sqrt((p.x - nearestX)*(p.x - nearestX) + (p.y - nearestY)*(p.y - nearestY) + (p.z - nearestZ)*(p.z - nearestZ));
}
};
class Plane { private: double a, b, c, d; public: Plane(double _a, double _b, double _c, double _d) : a(_a), b(_b), c(_c), d(_d) {}
double distanceTo(Point p) {
return fabs(a*p.x + b*p.y + c*p.z + d) / sqrt(a*a + b*b + c*c);
}
};
int main() { Point p1(0, 0, 0); Point p2(1, 1, 1); Point p3(2, 2, 2);
Line line1(p1, p2);
Line line2(p2, p3);
Plane plane(p1, p2, p3);
Point p4(3, 3, 3);
std::cout << "Distance from p4 to line1: " << line1.distanceTo(p4) << std::endl;
std::cout << "Distance from p4 to plane: " << plane.distanceTo(p4) << std::endl;
return 0;
}
/* 这个实现中,我们定义了三个类:Point(点),Line(线)和Plane(平面)。每个类都有一些成员函数来实现所需的功能。
在main函数中,我们创建了一些点、线和平面的实例,并调用它们的成员函数来计算距离。请注意,这个实现中没有考虑到计算机中实数计算的精度误差,你可能需要在实际使用中进行改进。 */
原文地址: https://www.cveoy.top/t/topic/qr7I 著作权归作者所有。请勿转载和采集!