如何计算一个点(高维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);
}
我正在使用 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);
}