Kinect を原点とします。また、Kinect からの (平面上の) ポイントの距離もわかります。これは、Kinect がこのポイントの距離として提供するものです。ノーマルもわかります。したがって、あなたがしなければならないことは、平面の平面方程式を見つけて、それを行列に変換し、それを逆にすることだけです。
点と法線ベクトルが与えられた平面方程式は、
n·(r-r_0) = 0 ; r_0 = 0
n·r = 0
私たちはrを知っています
r = (0, 0, -distance_at(kinect_depth_image_width/2, kinect_depth_image_height/2))
平面は次のように表現できることを思い出してください。
p(s,t) = r + u * s + v * t
ここで、u、v は平面の基底ベクトルです。したがって、これを行列として書き直すことができます
u_x v_x n_x r_x
u_y v_y n_y r_y
u_z v_z n_z r_z
0 0 0 1
u と v は、任意の「上」ベクトルと「右」ベクトルを選択することで決定できます。Y=(0,1,0) と X=(1,0,0) を使用し、あなたに対して直交化を実行することをお勧めします。 u と v を生成する既知の法線 n。
その行列を逆にすることで、平面上のゼロ点から kinect への変換が行われます。