Exemple #1
0
        /// <summary>
        /// 2点間の距離を取得する。
        /// </summary>
        /// <param name="v1">値1</param>
        /// <param name="v2">値2</param>
        /// <returns>距離</returns>
        static float Distance(ref Vector4DF v1, ref Vector4DF v2)
        {
            float dx = v1.X - v2.X;
            float dy = v1.Y - v2.Y;
            float dz = v1.Z - v2.Z;
            float dw = v1.W - v2.W;

            return((float)Math.Sqrt(dx * dx + dy * dy + dz * dz + dw * dw));
        }
Exemple #2
0
        /// <summary>
        /// 行列でベクトルを変形させる。
        /// </summary>
        /// <param name="in_">変形前ベクトル</param>
        /// <returns>変形後ベクトル</returns>
        Vector4DF Transform4D(ref Vector4DF in_)
        {
            float *values = stackalloc float[4];

            fixed(float *v = Values)
            {
                for (int i = 0; i < 4; i++)
                {
                    values[i]  = 0;
                    values[i] += in_.X * v[i * 4 + 0];
                    values[i] += in_.Y * v[i * 4 + 1];
                    values[i] += in_.Z * v[i * 4 + 2];
                    values[i] += in_.W * v[i * 4 + 3];
                }
            }

            Vector4DF o;

            o.X = values[0];
            o.Y = values[1];
            o.Z = values[2];
            o.W = values[3];
            return(o);
        }
Exemple #3
0
 /// <summary>
 /// 内積を取得する。
 /// </summary>
 /// <param name="v1">値1</param>
 /// <param name="v2">値2</param>
 /// <returns>内積</returns>
 static float Dot(ref Vector4DF v1, ref Vector4DF v2)
 {
     return(v1.X * v2.X + v1.Y * v2.Y + v1.Z * v2.Z + v1.W * v2.W);
 }