Point Cloud OpenでのNについて


ポイントクラウド関連が続きますが、今回はPoint Cloud OpenのNパラメーターについて説明します。

 

 

今回のサンプルファイルです。
pcopen_n.zip

Nパラメーターは一見、クエリーポイントの法線の向いている方向を検索するのかと思われますが、実はクエリーポイントの法線とポイントクラウドの法線の間の角度を元にポイントをリストに追加するかを決めています。
仮に、クエリーポイントが下のように原点にあり、(1,0,0)の法線をもつとします。このクエリーポイントを元にポイントクラウドをサーチしてみます。

1

 

Point Cloud Openで得られたポイントの色を赤に変えてみました。これでとのポイントがリストアップされたがわかります。下図のようにクエリーノーマルが(1,0,0)でCone Angleが90度だと、ポイントクラウドの法線が少しでもX軸の法を向いているとリストに追加されます。

2

 

下図は分かりやすく法線を放射状に作り、Cone Angleの角度が 0 から 360まで変化した時に得られたポイントを赤で表したものです。よく観察すると、180度を超えると今度は逆にポイントの数が減っていきます。Point Cloud Openの角度指定は度数になっていますが、実際に計算される時はクエリーポイントのノーマルとポイントクラウドのノーマルの内積を求め、それがCone Agnle のコサインの値以内ならばポイントがリストアップされるのです。

a

 

VOPで作る時は角度のパラメーターなどがあるので簡単にできますが、VEXで作ろうとするとすこし分かりにくくなります。なぜならヘルプを見ても 角度に関するプロトタイプが書かれてないからです。

3

 

ヘルプでは角度が含まれるプロトタイプはありませんが、法線を含む物はあるので、そのプロトタイプを使って N を元にサーチすることが出来ます。ヘルプにこの事が少しだけ触れられています。

Optionally, the Nchannel specifies a direction channel and the N vector specifies a search direction. Only points which are pointed in the same direction (i.e. dot(N, Npoint) > 0) will be queued.

要は2つの法線の内積が 0 位上のポイントがリストアップされるという事です。角度を設定する場所がないので、もちろん何の調整も出来ません。

4

 

Point Cloud Open をVEX で使うと、関数に渡す引数の数がかなり多くなるので、VOPで作ったほうが簡単かもしれません。それにVEXだとポイントクラウドファイルの指定をインプット番号で指定することが出来ず、op: キーワードを使って指定しないといけないので非常に面倒です。