#include #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函数中,我们创建了一些点、线和平面的实例,并调用它们的成员函数来计算距离。请注意,这个实现中没有考虑到计算机中实数计算的精度误差,你可能需要在实际使用中进行改进。 */

C++ 实现三维解析几何:点、线和平面

原文地址: https://www.cveoy.top/t/topic/qr7I 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录