public static List <Vector2> RemoveShortEdge(List <Vector2> original, float distance = 0.1f) // 半径
        {
            DoubleCircleLinkedList <Vector2> dcel = new DoubleCircleLinkedList <Vector2>();

            foreach (Vector2 v in original)
            {
                dcel.AddLast(v);
            }
            LinkedListNode <Vector2> cur  = dcel.First;
            List <Vector2>           temp = new List <Vector2>();

            do
            {
                Vector2 curPoint = cur.Value;
                temp.Add(curPoint);
                // float totalLen = 0.0f;
                do
                {
                    cur = dcel.Next(cur);
                    // totalLen += (cur.Value - curPoint).magnitude;
                    float totalLen = (cur.Value - curPoint).magnitude;
                    if (totalLen > distance)
                    {
                        break;
                    }
                } while (cur != dcel.First);
            } while (cur != dcel.First);
            return(temp);
        }
        public static List <Vector2> RemoveShortAngle(List <Vector2> original, float minAngle = 10.0f)
        {
            if (original.Count < 3)
            {
                return(original);
            }

            DoubleCircleLinkedList <Vector2> dcel = new DoubleCircleLinkedList <Vector2>();

            foreach (Vector2 v in original)
            {
                dcel.AddLast(v);
            }
            LinkedListNode <Vector2> cur = dcel.First;

            while (true)
            {
                int count = dcel.Count;
                do
                {
                    Vector2 curPoint = cur.Value;
                    Vector2 pre      = dcel.Previous(cur).Value;
                    Vector2 next     = dcel.Next(cur).Value;
                    pre  = curPoint - pre;
                    next = curPoint - next;
                    float angle = Vector2.Angle(pre, next);
                    cur = dcel.Next(cur);
                    if (angle < minAngle)
                    {
                        dcel.Remove(dcel.Previous(cur));
                    }
                } while (cur != dcel.First);
                if (dcel.Count == count)
                {
                    break;
                }
            }
            List <Vector2> tempOrigin = new List <Vector2>();

            do
            {
                tempOrigin.Add(cur.Value);
                cur = dcel.Next(cur);
            } while (cur != dcel.First);
            return(tempOrigin);
        }