ポイントのクラウドがあり、最適なラインが必要です。JAMA を使用していますが、理由がわかりません。何かが機能していません。仕組みがわからないのは多分私です。私は Nx3 マトリックス (これは JAMA svd がサポートするものです) を持っており、Svd から適切なマトリックス V を取得します。必要なベクトルは、最大特異値に対応する右特異ベクトル (行または列 ?) です。このベクトルは、主な方向を表すと想定されています。
すべてのベクトルは最大の正の値として y を持つと想定され、x は正または負の両方であり、z は負であると想定されます。しかし、取得したベクトルの y 値が負の場合や、とにかく間違った方向を指している場合があります。
私のポイントの雲はかなり規則的で、すべてがほぼy軸に沿って配置されています(zは小さく負です)。したがって、主な方向性は非常に簡単に見つけられるはずです。しかし、それはまだ正しく機能していません。
この場合、右の行列 V の行ベクトル (列ベクトルも試しました) を取得しています。すでに「pointSet」から重心を差し引いています。
public static Matrix bestDirection(Matrix pointSet){
Matrix bestFittingLine = new Matrix(3,1);
SingularValueDecomposition svd = pointSet.svd();
bestFittingLine.set(0, 0, svd.getV().get(0, 0));
bestFittingLine.set(1, 0, svd.getV().get(0, 1));
bestFittingLine.set(2, 0, svd.getV().get(0, 2));
return bestFittingLine;
}
たぶん何も考えていないのだと思います。Idk たぶん、別の手法または別のライブラリを使用する必要があります。