0

垂直面にたくさんの点があります。実際には、この平面は正確に垂直でなければなりません。しかし、点群を視覚化すると、垂直からわずかに (2 度近く) 傾いています。現時点では、この傾きしか計算できません。他のエラーに関しては、シフトなどはないと思います。

そのため、点データの座標を更新して、それらが垂直面上にあるようにしたいと考えています。なんらかの変換を行う必要があると思います。X 軸に沿った回転のみによる場合もあります。それがどうなるかわからない。

あなたは私の質問を理解したと思います。正直、数学は苦手です。そのため、正確な垂直面上にあるようにポイント座標を更新する方法を教えてください。

注:私はこれをc ++で実装しており、これらのことについて十分な知識を持っているプログラマーがたくさんいるので、この質問をc ++で投稿しています。

アップデート

私がこれまでに行ったことを正確に言うと、垂直オブジェクト + その周囲のものを表す点群データがあります。(データは移動スキャナーによって収集され、正しいワールド軸から軸がずれている場合があります)。問題は、データにエラーがあるかどうかを正確に判断できないことです。したがって、これを垂直平面オブジェクト (私のデータでも支配的なオブジェクト) で確認しました。実際には、その平面は真に垂直です。しかし、外れ値を取り除いて平面を適合させると、その平面は真に垂直ではなく、2 度近く傾いています。したがって、データに何らかのエラーがあるのではないかと疑っています。したがって、すべての点群 (平面上の点と他のオブジェクトを表す点を含む) を更新して、その特定の平面点を垂直面に正確に配置したいと考えています。それから、おそらく、すべてのポイントは、実際のように正しい位置に更新されます。つまり、すべての (x,y,z) 座標を更新する必要があります。

例として、下の図を参照してください。 ここに画像の説明を入力

左は元の点群を表し(ご覧のとおり、点自体は垂直ではありません)、後ろの線は私が当てはめた垂直面を示し、赤は天頂線です. ご覧のとおり、垂直面の傾きがあります。それで、右の図のデータ全体を更新したいと思います。次に、平面に再度適合するかどうかを更新した後 (外れ値を削除)、天頂線に正確に平行になります。私を助けてください。

4

4 に答える 4

1

私はそれについて少し考えました。x 軸に沿って回転させたいので、回転は xz 平面で行われます。つまり、これを 2D 問題にすることができます。ウィキペディアで少し調べた後、これが解決策になるかもしれません。

new z = ((x - intended x) * sin(angle)) + (z * cos(angle)) + intended x

ここで行っているのは、意図した x 値を現在の x 値から差し引いて、(意図した x, 0) の原点を回転させることです。ポイントを回転させた後、(意図した x, 0) を座標に追加して、正しい結果が得られるようにします。

于 2013-07-07T14:02:40.240 に答える
1

私は最近飛行機で働いていたので、あなたを助けることができるかもしれません. まず第一に、なぜポイントは最初から同一平面上にないのでしょうか? ポイントが傾いているのではなく、最初にポイントを共平面にしてから修正する必要があります。また、最初にポイントを同一平面上に置くと、効率が向上します。

これがあなたが探している答えではない場合は申し訳ありませんが、あなたを助ける前にもっと情報が必要です. また、3D 数学は難しいです。十分に取り組んでいると、特に私が経験しなければならなかった頭痛を経験した場合は、決して忘れることのない頭に叩き込まれ始めます。

于 2013-07-07T13:34:29.123 に答える
0

あなたの質問をもう一度読みましたが、この回答がお役に立てば幸いです。他に知っておくべきことがあれば教えてください。

さて、何かを回転させるには、回転する中心点が必要です。すでに傾斜角を検出できるようになったので、原点を中心に特定の角度でポイントを回転させる式が必要になります。さらに、この問題は 2D 平面でのみ発生するため、この基本式を使用してポイントを再調整できます。任意の 2 つの軸 x と y の場合:

Theta は、反時計回りに回転する角度です。x' と y' は新しいポイントです。x.origin と y.origin は、周回するポイントの座標です。私の計算が 100% 正しいかどうかはわかりませんが、そうでない場合は、1 つまたは 2 つの変更を加えればうまくいくと思います。

于 2013-07-07T15:47:44.537 に答える