如何计算一个点(高维space)相对于一组点构成的超平面的对称性?

How to compute the symmetric of a point (high dimension space) with respect to a hyperplane formed by a set of points?

我正在使用 C++,我想计算一个点相对于超平面的对称性。我在执行时给定的 维度中

我有超平面中的点。所以我通过求解一组线性方程来计算法向量。然后得到超平面(有法线和一个点),第一个点的投影,最后是对称的。

我尝试使用 eigen3 库,但它似乎需要在编译时给出维度。

欢迎使用此库(或任何其他库)解决问题的任何想法或捷径方法。

提前致谢。

Eigen 可以使用编译时和 运行 时大小。要使用 运行 时间大小,请指定 Dynamic 或使用预定义的别名:

Eigen::Matrix<double, Eigen::Dynamic, 1> x(n);

或者只是

Eigen::VectorXd x(n);

其中 n 是您 运行 时间指定的维数。

查看文档 here


一旦你计算了法向量和原点(只是你的点之一),你可以这样做:

#include <Eigen/Core>

using namespace Eigen;

VectorXd mirror(const VectorXd &normal, const VectorXd &origin, const VectorXd &x)
{
    return x - 2.0 * normal * ((x-origin).dot(normal)) / normal.dot(normal);
}