詳しくは「表:幾何関数」(表B.116「表:幾何関数」)を参照ください。
幾何関数はクロス積とドット積等の行列演算に欠かせない処理を含みます。
例えば3次元の座標の計算をする場合は、p0.xyzとp1.xyzのクロス積とドット積を計算します。
float4 cross (float4 p0, float4 p1) float3 cross (float3 p0, float3 p1)
戻り値のfloat4のw要素は0.0となります。
float dot (floatn p0, floatn p1)
p0とp1のドット積を求めます。
サンプル.
float4 matrix[3]; matrix[0] = (float4)(1.0f, 2.0f, 3.0f, 0.0f); matrix[1] = (float4)(4.0f, 5.0f, 6.0f, 0.0f); matrix[2] = (float4)(7.0f, 8.0f, 9.0f, 0.0f); float4 vector; vector = (float4)(1.0f,2.0f,3.0f,4.0f); float dot_result = dot(*matrix, vector); printf("dot_result: %f\n", dot_result); printf("%#v4f\n",matrix[0]); printf("%#v4f\n",vector); // 2 x 6 - 3 x 5 = -3 // 3 x 4 - 1 x 6 = 6 // 1 x 5 - 2 x 4 = -3 float4 cross_result = cross(matrix[1], vector); printf("cross_result: %#v4f\n", cross_result);
出力.
dot_result: 14.000000 1.000000,2.000000,3.000000,0.000000 1.000000,2.000000,3.000000,4.000000 cross_result: 3.000000,-6.000000,3.000000,0.000000
この例のドット積は(1,2,3,0)と(1,2,3,4)を積を算出した和(1+4+9)を求めています。
クロス積の計算は複雑なため、数学の入門書籍ではない本書では解説はしません。線形数学の入門書の導入部分や、ネット等で情報は見つかるものと思います。
Copyright 2018-2019, by Masaki Komatsu