1

一連の 3D ポイントがあり、どのポイントが特定のポイントpに最も近いかを計算する必要があります。Eigenでそれを行う正しい方法はどれだろうと思っています。これまでのところ、私は持っています:

Matrix<double, Dynamic, 3> points; // The set of 3D points
Matrix<double, 1, 3> p;

// Populate the "points" matrix

...

// Fill a matrix with several copies of "p" in order to match the size
of "points"

Matrix<double, Dynamic, 3> pp(points.rows(), 3);

pp = Matrix<double, Dynamic, 1>::Ones(points.rows, 1) * p;

Matrix<double, Dynamic, 1> sq_distances = (points - pp).rowwise.squaredNorm();
Matrix<bool, Dynamic, 1> nearest_points = sq_distances < (dist_threshold * dist_threshold);

次に、次のように「nearest_points」条件を満たす「points」内のポイントを抽出する方法がありますか?

Matrix<double, Dynamic, 3> nearest = points(nearest_points);

?

4

1 に答える 1

2

最も近いものについては、次のことをお勧めします。

int i;
double sqdist = (points.rowwise()-p).rowwise().squaredNorm().minCoeff(&i);
nearest = points.row(i);

特定のボールにあるものについては、現在、自分で 1 つのループを作成する必要があります。

ArrayXd sqdists = (points.rowwise()-p).rowwise().squaredNorm();
Matrix<double,Dynamic,3> nearests( (sqdists<sqradius).count(), 3 );
int count = 0;
for(int i=0; i<points.rows(); ++i)
  if(sqdists(i)<sqradius)
    nearests.row(count++) = points.row(i);
于 2013-10-01T09:48:47.907 に答える