Example #1
0
 /// <summary>
 /// 他のvectorで初期化するためのコンストラクタ。
 /// </summary>
 /// <param name="v"></param>
 public Vector3D(Vector3D v)
 {
     X = v.X; Y = v.Y; Z = v.Z;
 }
Example #2
0
 /// <summary>
 /// 他のベクトルを減算する。
 /// </summary>
 /// <param name="v"></param>
 public void Sub(Vector3D v)
 {
     X -= v.X;
     Y -= v.Y;
     Z -= v.Z;
 }
Example #3
0
 /// <summary>
 /// 外積を求める(3次元の外積の結果はベクトル)。
 /// </summary>
 /// <param name="v"></param>
 public void OuterProduct(Vector3D v)
 {
     double x_,y_,z_;
     x_ = Y * v.Z - Z * v.Y;
     y_ = Z * v.X - X * v.Z;
     z_ = X * v.Y - Y * v.X;
     SetVector(x_,y_,z_);
 }
Example #4
0
 /// <summary>
 /// 内積を求める。
 /// </summary>
 /// <param name="v"></param>
 /// <returns></returns>
 public double InnerProduct(Vector3D v)
 {
     return X * v.X + Y * v.Y + Z * v.Z;
 }
Example #5
0
        /// <summary>
        /// 近似による距離(絶対値)の算出。sqrtを使っていない分だけ速い。
        /// </summary>
        /// <param name="v"></param>
        /// <returns></returns>
        public double Distance(Vector3D v)
        {
            double ax = global::System.Math.Abs(X - v.X);
            double ay = global::System.Math.Abs(Y - v.Y);
            double az = global::System.Math.Abs(Z - v.Z);

            //	一番長い距離 + 二つ目の/2 + 3つ目の/2ぐらいでいいんじゃ?
            if ( ax > ay ) {
                if ( ax > az )
                    return ax + ay / 2 + az / 2;
            } else {
                if ( ay > az )
                    return ay + ax / 2 + az / 2;
            }
            return az + ax / 2 + ay / 2;
        }
Example #6
0
 /// <summary>
 /// 他のベクトルを加算する。
 /// </summary>
 /// <param name="v"></param>
 public void Add(Vector3D v)
 {
     X += v.X;
     Y += v.Y;
     Z += v.Z;
 }