Exemple #1
0
        /// <summary>
        /// XmlNodeからVector3を生成して返す
        /// </summary>
        /// <param name="clXmlNode">xmlノード</param>
        /// <returns>Vector3</returns>
        public static ClsVector3 GetVecFromXmlNode(XmlNode clXmlNode)
        {
            ClsVector3 clVec = new ClsVector3();

            XmlNodeList clListNode = clXmlNode.ChildNodes;

            foreach (XmlNode clNode in clListNode)
            {
                if ("X".Equals(clNode.Name))
                {
                    clVec.X = Convert.ToSingle(clNode.InnerText);
                    continue;
                }

                if ("Y".Equals(clNode.Name))
                {
                    clVec.Y = Convert.ToSingle(clNode.InnerText);
                    continue;
                }

                if ("Z".Equals(clNode.Name))
                {
                    clVec.Z = Convert.ToSingle(clNode.InnerText);
                    continue;
                }

                throw new Exception("this is not normal Vec.");
            }

            return(clVec);
        }
Exemple #2
0
 //外積
 public static ClsVector3 Cross(ClsVector3 v1, ClsVector3 v2)
 {
     return(new ClsVector3(
                v1.Y * v2.Z - v1.Z * v2.Y,
                v1.Z * v2.X - v1.X * v2.Z,
                v1.X * v2.Y - v1.Y * v2.X));
 }
Exemple #3
0
        public ClsVector3 Add(ClsVector3 a, ClsVector3 b)
        {
            ClsVector3 ret = new ClsVector3(a);

            ret.Add(b);
            return(ret);
        }
Exemple #4
0
        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="enParam">種別</param>
        /// <param name="inLength">対象フレーム数</param>
        /// <param name="clPos">座標</param>
        /// <param name="pclVec">各ベクトル</param>
        public ClsDatTween(EnmParam enParam, int inLength, ClsVector3 clPos, List <ClsVector3> pclVec)
        {
            this.mParam  = enParam;
            this.mLength = inLength;

            this.mPos = new ClsVector3();
            if (clPos != null)
            {
                this.mPos.X = clPos.X;
                this.mPos.Y = clPos.Y;
            }

            this.mListVec = new List <ClsVector3>();
            if (pclVec != null)
            {
                int inCnt;
                for (inCnt = 0; inCnt < 3; inCnt++)
                {
                    ClsVector3 clVec = new ClsVector3(pclVec[inCnt].X, pclVec[inCnt].Y, 0.0f);
                    this.mListVec.Add(clVec);
                }
            }

            this.mImage = ClsDatTween.CreateImage(this, 15, 15);
        }
Exemple #5
0
 /// <summary>
 /// xml形式でベクター3を ClsSystem.mFileBuffer に出力する処理
 /// </summary>
 /// <param name="clHeader">ヘッダー</param>
 /// <param name="clName">要素名</param>
 /// <param name="clVec">ベクトル</param>
 public static void AppendElement(string clHeader, string clName, ClsVector3 clVec)
 {
     ClsTool.AppendElementStart(clHeader, clName);
     ClsTool.AppendElement(clHeader + ClsSystem.FILE_TAG, "X", clVec.X);
     ClsTool.AppendElement(clHeader + ClsSystem.FILE_TAG, "Y", clVec.Y);
     ClsTool.AppendElement(clHeader + ClsSystem.FILE_TAG, "Z", clVec.Z);
     ClsTool.AppendElementEnd(clHeader, clName);
 }
Exemple #6
0
        //v2の要素0はv1を適用
        public static ClsVector3 operator /(ClsVector3 v1, ClsVector3 v2)
        {
            ClsVector3 ret = new ClsVector3();

            ret.X = (v2.X == 0) ? v1.X : (v1.X / v2.X);
            ret.Y = (v2.Y == 0) ? v1.Y : (v1.Y / v2.Y);
            ret.Z = (v2.Z == 0) ? v1.Z : (v1.Z / v2.Z);
            return(ret);
        }
Exemple #7
0
        public static float Angle(ClsVector3 v1, ClsVector3 v2)
        {
            double fs = Math.Sqrt(v1.Length() * v2.Length());

            if (fs != 0f)
            {
                return(0);
            }
            return((float)Math.Acos(v1.Dot(v1, v2) / fs));
        }
Exemple #8
0
        //正規化
        public ClsVector3 Normalize()
        {
            ClsVector3 v    = new ClsVector3();
            float      leng = this.Length();

            if (leng != 0)
            {
                v = this / leng;
            }
            return(v);
        }
Exemple #9
0
        //角度計算
        public static float ToAngle(ClsVector3 from, ClsVector3 to)
        {
            //note: Degress = radians * (180/Math.PI);
            //2D θ=arcTan(x,y)
            //3D r=sqrt(x*x+y*y+z*z)
            //   θ=arcTan(sqrt(x*x+y*y),z)
            //   Φ=arcTan(y,x)

            //まだ
            return(0);
        }
Exemple #10
0
        //2点間線形補完Linear(rate 0-1)
        public static ClsVector3 Linear(ClsVector3 v1, ClsVector3 v2, double rate)
        {
            ClsVector3 ret = new ClsVector3();

            if (rate < 0.0f)
            {
                rate = 0.0f;
            }
            if (rate > 1.0f)
            {
                rate = 1.0f;             //clamp
            }
            //ret = v1 * (1.0f - rate) + v2 * rate;
            ret = v1 + (v2 - v1) * rate;
            return(ret);
        }
Exemple #11
0
        //3次補完 Lerp
        public static ClsVector3 Lerp(ClsVector3 v1, ClsVector3 v2, double rate)
        {
            ClsVector3 ret = new ClsVector3();

            if (rate < 0.0f)
            {
                rate = 0.0f;
            }
            if (rate > 1.0f)
            {
                rate = 1.0f;                           //clamp
            }
            rate = rate * rate * (3.0f - 2.0f * rate); //ここの違いで色々?
            ret  = v1 * (1.0f - rate) + v2 * rate;
            return(ret);
        }
Exemple #12
0
        /// <summary>
        /// XmlNodeListからVector3を生成して返す
        /// </summary>
        /// <param name="clListNode">ノードリスト</param>
        /// <param name="clName">要素名</param>
        /// <returns>int値</returns>
        public static ClsVector3 GetVecFromXmlNodeList(XmlNodeList clListNode, string clName)
        {
            ClsVector3 clValue = null;

            foreach (XmlNode clNode in clListNode)
            {
                if (clName.Equals(clNode.Name))
                {
                    clValue = ClsTool.GetVecFromXmlNode(clNode);
                    return(clValue);
                }
            }

            clValue = new ClsVector3();
            return(clValue);
        }
Exemple #13
0
        public byte[] mRate = null; //要素数MAX_X個のリスト

        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="enParam">種別</param>
        /// <param name="inLength">対象フレーム数</param>
        /// <param name="clPos">座標</param>
        /// <param name="pclVec">各ベクトル</param>
        public ClsDatTween(EnmParam enParam, int inLength)
        {
            this.mParam  = enParam;
            this.mLength = inLength;

            this.mPos   = new ClsVector3();
            this.mPos.X = ClsDatTween.POS_X1;
            this.mPos.Y = ClsDatTween.POS_Y1;

            this.mListVec = new List <ClsVector3>();
            ClsVector3 clVec = new ClsVector3(ClsDatTween.VEC_X0, ClsDatTween.VEC_Y0, 0.0f);

            this.mListVec.Add(clVec);
            clVec = new ClsVector3(ClsDatTween.VEC_X1, ClsDatTween.VEC_Y1, 0.0f);
            this.mListVec.Add(clVec);
            clVec = new ClsVector3(ClsDatTween.VEC_X2, ClsDatTween.VEC_Y2, 0.0f);
            this.mListVec.Add(clVec);

            this.mImage = ClsDatTween.CreateImage(this, 15, 15);
        }
Exemple #14
0
        /// <summary>
        /// 読み込み処理
        /// </summary>
        /// <param name="clXmlNode">xmlノード</param>
        public void Load(XmlNode clXmlNode)
        {
            XmlNodeList clListNode = clXmlNode.ChildNodes;
            string      clParam    = ClsTool.GetStringFromXmlNodeList(clListNode, "Param");

            this.mParam  = (EnmParam)Enum.Parse(typeof(EnmParam), clParam);
            this.mLength = ClsTool.GetIntFromXmlNodeList(clListNode, "Length");
            this.mPos    = ClsTool.GetVecFromXmlNodeList(clListNode, "Pos");

            //以下、各管理クラス作成処理
            foreach (XmlNode clNode in clListNode)
            {
                if ("Vec".Equals(clNode.Name))
                {
                    ClsVector3 clVec = ClsTool.GetVecFromXmlNode(clNode);
                    this.mListVec.Add(clVec);
                    continue;
                }
            }
        }
Exemple #15
0
        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="clForm">メインフォーム</param>
        /// <param name="enParam">種別</param>
        /// <param name="inFrmStart">開始フレーム</param>
        /// <param name="inFrmEnd">終了フレーム</param>
        /// <param name="inFrmCurrent">カレントフレーム</param>
        /// <param name="clPos">中心座標(0.0~1.0)</param>
        /// <param name="pclListVec">各ベクトル(0.0~1.0)</param>
        public FormTween(FormMain clForm, EnmParam enParam, int inFrmStart, int inFrmEnd, int inFrmCurrent, ClsVector3 clPos, List <ClsVector3> clListVec)
        {
            InitializeComponent();

            //以下、初期化処理
            this.mFormMain   = clForm;
            this.Text        = "レートグラフ " + enParam;
            this.mGripNo     = 0;
            this.mParam      = enParam;
            this.mFrmStart   = inFrmStart;
            this.mFrmEnd     = inFrmEnd;
            this.mFrmCurrent = inFrmCurrent;

            this.mListPos = new List <ClsVector3>();
            this.mListPos.Add(new ClsVector3(ClsDatTween.POS_X0, ClsDatTween.POS_Y0, 0.0f));
            this.mListPos.Add(new ClsVector3(clPos.X, clPos.Y, clPos.Z));
            this.mListPos.Add(new ClsVector3(ClsDatTween.POS_X2, ClsDatTween.POS_Y2, 0.0f));

            this.mListVec = new List <ClsVector3>();
            int inCnt;

            for (inCnt = 0; inCnt < 3; inCnt++)
            {
                this.mListVec.Add(new ClsVector3(clListVec[inCnt].X, clListVec[inCnt].Y, clListVec[inCnt].Z));
            }

            //panel_PreView.DoubleBuuferd = true;
            panel_PreView.GetType().InvokeMember("DoubleBuffered", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.SetProperty, null, panel_PreView, new object[] { true });
        }
Exemple #16
0
 //Minimum
 public void Min(ClsVector3 c)
 {
     this.X = (this.X < c.X) ? this.X : c.X;
     this.Y = (this.Y < c.Y) ? this.Y : c.Y;
     this.Z = (this.Z < c.Z) ? this.X : c.Z;
 }
Exemple #17
0
 //Maxim
 public void Max(ClsVector3 c)
 {
     this.X = (this.X > c.X) ? this.X : c.X;
     this.Y = (this.Y > c.Y) ? this.Y : c.Y;
     this.Z = (this.Z > c.Z) ? this.X : c.Z;
 }
Exemple #18
0
 //ret:new Vector = this - B
 public void Distance(ClsVector3 b)
 {
     X -= b.X;
     Y -= b.Y;
     Z -= b.Z;
 }
Exemple #19
0
 //this*Vector3(*= Vector3)
 public void Scale(ClsVector3 s)
 {
     X *= s.X;
     Y *= s.Y;
     Z *= s.Z;
 }
Exemple #20
0
 //Copy
 public ClsVector3(ClsVector3 c)
 {
     this.X = c.X;
     this.Y = c.Y;
     this.Z = c.Z;
 }
Exemple #21
0
 //内積
 public float Dot(ClsVector3 v1, ClsVector3 v2)
 {
     return(v1.X * v2.X + v1.Y * v2.Y + v1.Z * v2.Z);
 }
Exemple #22
0
 public void Add(ClsVector3 b)
 {
     X += b.X;
     Y += b.Y;
     Z += b.Z;
 }