public void Set(CVector4 v) { this.x = v.x; this.y = v.y; this.z = v.z; this.w = v.w; }
public CVector4(CVector4 v) { this.x = v.x; this.y = v.y; this.z = v.z; this.w = v.w; }
/// <summary> /// 4方向ベクトルと4x4行列の積 /// </summary> /// <param name="dv">出力先ベクトル</param> /// <param name="v">計算用ベクトル</param> /// <param name="m">計算用行列</param> public static void MatApply4(CVector4 dv, CVector4 v, CMatrix4 m) { dv.x = v.x * m.m[0, 0] + v.y * m.m[1, 0] + v.z * m.m[2, 0] + v.w * m.m[3, 0]; dv.y = v.x * m.m[0, 1] + v.y * m.m[1, 1] + v.z * m.m[2, 1] + v.w * m.m[3, 1]; dv.z = v.x * m.m[0, 2] + v.y * m.m[1, 2] + v.z * m.m[2, 2] + v.w * m.m[3, 2]; dv.z = v.x * m.m[0, 3] + v.y * m.m[1, 3] + v.z * m.m[2, 3] + v.w * m.m[3, 3]; }
/// <summary> /// 外積を求める /// </summary> /// <param name="v1">入力ベクトル1</param> /// <param name="v2">入力ベクトル2</param> /// <returns>外積ベクトル</returns> public static CVector4 Cross(CVector4 v1, CVector4 v2) { CVector4 v = new CVector4(); v.x = v1.y * v2.z - v1.z * v2.y; v.y = v1.z * v2.x - v1.x * v2.z; v.z = v1.x * v2.y - v1.y * v2.x; v.w = 0.0f; return(v); }
/// <summary> /// 法線ベクトルを求める /// </summary> /// <param name="v1">入力ベクトル1</param> /// <param name="v2">入力ベクトル2</param> /// <param name="v3">入力ベクトル3</param> /// <returns>法線ベクトル</returns> public static CVector4 Normal(CVector4 v1, CVector4 v2, CVector4 v3) { CVector4 v = new CVector4(); CVector4 a = new CVector4(); CVector4 b = new CVector4(); a = v2 - v1; b = v3 - v2; v = CVector4.Cross(a, b); v = v.Normalize(); return(v); }
// 評価 public override bool Equals(object obj) { if (obj == null) { return(false); } CVector4 v = obj as CVector4; if ((object)v == null) { return(false); } return((this.x == v.x) && (this.y == v.y) && (this.z == v.z) && (this.w == v.w)); }
/// <summary> /// 内積を求める /// </summary> /// <param name="v1">入力ベクトル1</param> /// <param name="v2">入力ベクトル2</param> /// <returns>内積値</returns> public static float Dot(CVector4 v1, CVector4 v2) { return(v1.x * v2.x + v1.y * v2.y + v1.z * v2.z); }