Closed xiaoiver closed 3 years ago
以下计算切线方法未考虑控制点与起点/终点重合的情况:
// 起点与控制点1 segment.startTangent = [prePoint[0] - cp1[0], prePoint[1] - cp1[1]]; // 终点与控制点2 segment.endTangent = [currentPoint[0] - cp2[0], currentPoint[1] - cp2[1]];
导致计算水平直线时,会得到 [0, 0]: ['C', 100, 100, 100, 100, 200, 200]
[0, 0]
['C', 100, 100, 100, 100, 200, 200]
正确做法应该是判定重合时,使用两个控制点计算:
if (segment.startTangent[0] === 0 && segment.startTangent[1] === 0) { segment.startTangent = [cp1[0] - cp2[0], cp1[1] - cp2[1]]; } if (segment.endTangent[0] === 0 && segment.endTangent[1] === 0) { segment.endTangent = [cp2[0] - cp1[0], cp2[1] - cp1[1]]; }
Fixed in v2.0.10
以下计算切线方法未考虑控制点与起点/终点重合的情况:
导致计算水平直线时,会得到
[0, 0]
:['C', 100, 100, 100, 100, 200, 200]
正确做法应该是判定重合时,使用两个控制点计算: