示例#1
0
            return joint.sort(function (p0, p1) {
                // 如果交点需要不相等,则按小到大排序
                if (p0.index !== p1.index) {
                    return p0.index - p1.index;
                }

                // 相等,则同一段上有多个交点,按照与原点距离排序
                var cur = path[p0.index];
                var next = p0.index === length - 1 ? path[0] : path[p0.index + 1];

                // 直线
                if (cur.onCurve && next.onCurve) {
                    return  Math.pow(p0.x - cur.x, 2) + Math.pow(p0.y - cur.y, 2)
                        -  (Math.pow(p1.x - cur.x, 2) + Math.pow(p1.y - cur.y, 2));
                }
                else if (!cur.onCurve) {
                    var prev = p0.index === 0 ? path[length - 1] : path[p0.index - 1];
                    var t1 = getBezierQ2T(prev, cur, next, p0);
                    var t2 = getBezierQ2T(prev, cur, next, p1);
                    return t1 === t2 ? 0 : t1 < t2 ? -1 : 1;
                }
            });
示例#2
0
 pathIterator(path, function (c, p0, p1, p2, i) {
     if (c === 'L') {
         if (Math.abs((p.y - p0.y) * (p.x - p1.x) - (p.y - p1.y) * (p.x - p0.x)) <= 0.001) {
             zCount = i;
             return false;
         }
     }
     else if(c === 'Q') {
         if (false !== getBezierQ2T(p0, p1, p2, p)) {
             zCount = i;
             return false;
         }
     }
 });