CubicBezier() public static method

public static CubicBezier ( Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3, float t ) : Vector3
p0 Vector3
p1 Vector3
p2 Vector3
p3 Vector3
t float
return Vector3
Exemplo n.º 1
0
        private void DrawGizmoBezier(Vector3 p1, Vector3 p2)
        {
            Vector3 dir = p2 - p1;

            if (dir == Vector3.zero)
            {
                return;
            }

            Vector3 normal   = Vector3.Cross(Vector3.up, dir);
            Vector3 normalUp = Vector3.Cross(dir, normal);

            normalUp  = normalUp.normalized;
            normalUp *= dir.magnitude * 0.1f;

            Vector3 p1c = p1 + normalUp;
            Vector3 p2c = p2 + normalUp;

            Vector3 prev = p1;

            for (int i = 1; i <= 20; i++)
            {
                float   t = i / 20.0f;
                Vector3 p = AstarMath.CubicBezier(p1, p1c, p2c, p2, t);
                Gizmos.DrawLine(prev, p);
                prev = p;
            }
        }
Exemplo n.º 2
0
        void DrawGizmoBezier(Vector3 p1, Vector3 p2)
        {
            var dir = p2 - p1;

            if (dir == Vector3.zero)
            {
                return;
            }

            var normal   = Vector3.Cross(Vector3.up, dir);
            var normalUp = Vector3.Cross(dir, normal);

            normalUp  = normalUp.normalized;
            normalUp *= dir.magnitude * 0.1f;

            var p1c = p1 + normalUp;
            var p2c = p2 + normalUp;

            var prev = p1;

            for (var i = 1; i <= 20; i++)
            {
                var t = i / 20.0f;
                var p = AstarMath.CubicBezier(p1, p1c, p2c, p2, t);
                Gizmos.DrawLine(prev, p);
                prev = p;
            }
        }
Exemplo n.º 3
0
        public List <Vector3> SmoothBezier(List <Vector3> path)
        {
            if (subdivisions < 0)
            {
                subdivisions = 0;
            }

            int            subMult    = 1 << subdivisions;
            List <Vector3> subdivided = ListPool <Vector3> .Claim();

            //new Vector3[(path.Length-1)*(int)subMult+1];

            for (int i = 0; i < path.Count - 1; i++)
            {
                Vector3 tangent1 = Vector3.zero;
                Vector3 tangent2 = Vector3.zero;
                if (i == 0)
                {
                    tangent1 = path[i + 1] - path[i];
                }
                else
                {
                    tangent1 = path[i + 1] - path[i - 1];
                }

                if (i == path.Count - 2)
                {
                    tangent2 = path[i] - path[i + 1];
                }
                else
                {
                    tangent2 = path[i] - path[i + 2];
                }

                tangent1 *= bezierTangentLength;
                tangent2 *= bezierTangentLength;

                Vector3 v1 = path[i];
                Vector3 v2 = v1 + tangent1;
                Vector3 v4 = path[i + 1];
                Vector3 v3 = v4 + tangent2;


                for (int j = 0; j < subMult; j++)
                {
                    subdivided.Add(AstarMath.CubicBezier(v1, v2, v3, v4, (float)j / subMult));
                }
            }

            //Assign the last point
            subdivided.Add(path[path.Count - 1]);

            return(subdivided);
        }
Exemplo n.º 4
0
        public List <Vector3> SmoothBezier(List <Vector3> path)
        {
            if (this.subdivisions < 0)
            {
                this.subdivisions = 0;
            }
            int            num  = 1 << this.subdivisions;
            List <Vector3> list = ListPool <Vector3> .Claim();

            for (int i = 0; i < path.Count - 1; i++)
            {
                Vector3 vector;
                if (i == 0)
                {
                    vector = path[i + 1] - path[i];
                }
                else
                {
                    vector = path[i + 1] - path[i - 1];
                }
                Vector3 vector2;
                if (i == path.Count - 2)
                {
                    vector2 = path[i] - path[i + 1];
                }
                else
                {
                    vector2 = path[i] - path[i + 2];
                }
                vector  *= this.bezierTangentLength;
                vector2 *= this.bezierTangentLength;
                Vector3 vector3 = path[i];
                Vector3 p       = vector3 + vector;
                Vector3 vector4 = path[i + 1];
                Vector3 p2      = vector4 + vector2;
                for (int j = 0; j < num; j++)
                {
                    list.Add(AstarMath.CubicBezier(vector3, p, p2, vector4, (float)j / (float)num));
                }
            }
            list.Add(path[path.Count - 1]);
            return(list);
        }
Exemplo n.º 5
0
        private void DrawGizmoBezier(Vector3 p1, Vector3 p2)
        {
            Vector3 rhs = p2 - p1;

            if (rhs != Vector3.zero)
            {
                Vector3 vector2 = Vector3.Cross(Vector3.up, rhs);
                Vector3 vector3 = (Vector3)(Vector3.Cross(rhs, vector2).normalized *(rhs.magnitude * 0.1f));
                Vector3 vector4 = p1 + vector3;
                Vector3 vector5 = p2 + vector3;
                Vector3 from    = p1;
                for (int i = 1; i <= 20; i++)
                {
                    float   t  = ((float)i) / 20f;
                    Vector3 to = AstarMath.CubicBezier(p1, vector4, vector5, p2, t);
                    Gizmos.DrawLine(from, to);
                    from = to;
                }
            }
        }
Exemplo n.º 6
0
        private void DrawGizmoBezier(Vector3 p1, Vector3 p2)
        {
            Vector3 vector = p2 - p1;

            if (vector == Vector3.zero)
            {
                return;
            }
            Vector3 rhs     = Vector3.Cross(Vector3.up, vector);
            Vector3 vector2 = Vector3.Cross(vector, rhs).normalized;

            vector2 *= vector.magnitude * 0.1f;
            Vector3 p3   = p1 + vector2;
            Vector3 p4   = p2 + vector2;
            Vector3 from = p1;

            for (int i = 1; i <= 20; i++)
            {
                float   t       = (float)i / 20f;
                Vector3 vector3 = AstarMath.CubicBezier(p1, p3, p4, p2, t);
                Gizmos.DrawLine(from, vector3);
                from = vector3;
            }
        }