Esempio n. 1
0
 public static GVector2 Divide(GVector2 v1, float divider)
 {
     if (GMath.Abs(divider) > GMath.EPS)
     {
         return(new GVector2(v1.x / divider, v1.y / divider));
     }
     return(v1);
 }
Esempio n. 2
0
        /// <summary>
        /// 向量夹角
        /// </summary>
        /// <param name="v1"></param>
        /// <param name="v2"></param>
        /// <returns>返回值范围:[0,360)</returns>
        public static float Angle(GVector2 v1, GVector2 v2)
        {
            float v = GMath.Atan(v1.x, v1.y) - GMath.Atan(v2.x, v2.y);

            if (v < 0)
            {
                v += 360;
            }
            return(v);
        }
Esempio n. 3
0
        public static GVector2 CatmullRom(GVector2 v1, GVector2 v2, GVector2 v3, GVector2 v4, float lerp)
        {
            float amountPow2 = lerp.Pow2();
            float amountPow3 = amountPow2 * lerp;

            return(new GVector2(
                       ((2f * v2.x + (-v1.x + v3.x) * lerp + (2f * v1.x - 5f * v2.x + 4f * v3.x - v4.x) * amountPow2 + (3f * v2.x - 3f * v3.x - v1.x + v4.x) * amountPow3) * 0.5f),
                       ((2f * v2.y + (-v1.y + v3.y) * lerp + (2f * v1.y - 5f * v2.y + 4f * v3.y - v4.y) * amountPow2 + (3f * v2.y - 3f * v3.y - v1.y + v4.y) * amountPow3) * 0.5f)
                       ));
        }
Esempio n. 4
0
        public static GVector2 Hermite(GVector2 value1, GVector2 tangent1, GVector2 value2, GVector2 tangent2, float lerp)
        {
            float lerpPow2 = lerp.Pow2();
            float lerpPow3 = lerpPow2 * lerp;
            float h1       = 2 * lerpPow3 - 3 * lerpPow2 + 1;
            float h2       = -2 * lerpPow3 + 3 * lerpPow2;
            float h3       = lerpPow3 - 2 * lerpPow2 + lerp;
            float h4       = lerpPow3 - lerpPow2;

            return(new GVector2(
                       h1 * value1.x + h2 * value2.x + h3 * tangent1.x + h4 * tangent2.x,
                       h1 * value1.y + h2 * value2.y + h3 * tangent1.y + h4 * tangent2.y
                       ));
        }
Esempio n. 5
0
 public static GVector2 Subtract(GVector2 v1, GVector2 v2)
 {
     return(new GVector2(v1.x - v2.x, v1.y - v2.y));
 }
Esempio n. 6
0
 public static GVector2 Add(GVector2 v1, GVector2 v2)
 {
     return(new GVector2(v1.x + v2.x, v1.y + v2.y));
 }
Esempio n. 7
0
 public static float Distance2(GVector2 v1, GVector2 v2)
 {
     return((v1.x - v2.x).Pow2() + (v1.y - v2.y).Pow2());
 }
Esempio n. 8
0
 public static float Distance(GVector2 v1, GVector2 v2)
 {
     return(GMath.Sqrt(Distance2(v1, v2)));
 }
Esempio n. 9
0
 public static float Dot(GVector2 v1, GVector2 v2)
 {
     return(v1.x * v2.x + v1.y * v2.y);
 }
Esempio n. 10
0
 public GVector2(GVector2 origin)
 {
     x = origin.x; y = origin.y;
 }
Esempio n. 11
0
 public static GVector2 SmoothStep(GVector2 v1, GVector2 v2, float lerp)
 {
     return(Lerp(v1, v2, lerp.Pow2() * (3 - 2 * lerp)));
 }
Esempio n. 12
0
 public static GVector2 Lerp(GVector2 v1, GVector2 v2, float lerp)
 {
     return(v1 + (v2 - v1) * lerp);
 }
Esempio n. 13
0
 public static GVector2 Divide(GVector2 v1, GVector2 v2)
 {
     return(new GVector2(v2.x > GMath.EPS ? v1.x : (v1.x / v2.x), v2.y > GMath.EPS ? v1.y : (v1.y / v2.y)));
 }
Esempio n. 14
0
 public static GVector2 Multiply(GVector2 v1, GVector2 v2)
 {
     return(new GVector2(v1.x * v2.x, v1.y * v2.y));
 }
Esempio n. 15
0
 public static GVector2 Multiply(GVector2 v1, float factor)
 {
     return(new GVector2(v1.x * factor, v1.y * factor));
 }
Esempio n. 16
0
 public static GVector2 Negate(GVector2 v1)
 {
     return(new GVector2(-v1.x, -v1.y));
 }