1
我在paper.js中構建了一個工具,它允許插入新的控制點,這很好,我遇到的問題,是我還必須計算每個新控制點的手柄位置(除非我錯過了某些東西,它並不表示紙張會爲您做這件事),而這證明是非常重要的任務。下面的代碼是我目前正在工作的,該點已成功添加到句柄中,但它會使曲線變形。我想添加手柄,使曲線不變形。用Paper.js插入貝塞爾曲線中的新點的理想手柄位置
gEditor.MoveTool.onMouseDown = function (event) {
gEditor.HitResult = paper.project.hitTest(event.point, gEditor.HitOptions);
var location = gEditor.HitResult.location;
var newPoint = gEditor.HitResult.item.insert(location.index + 1, event.point);
var prevSegment, nextSegment;
if (location.index - 1 >= 0){
prevSegment = gEditor.HitResult.item.segments[location.index - 1];
}
if (location.index + 2 < gEditor.HitResult.item.length) {
nextSegment = gEditor.HitResult.item.segments[location.index + 2];
}
if (prevSegment && nextSegment) {
newPoint.handleIn = {
x: prevSegment.point.x - ((prevSegment.point.x + newPoint.point.x)/2),
y: prevSegment.point.y - ((prevSegment.point.y + newPoint.point.y)/2),
};
newPoint.handleOut = {
x: nextSegment.point.x - ((nextSegment.point.x + newPoint.point.x)/2),
y: nextSegment.point.y - ((nextSegment.point.y + newPoint.point.y)/2),
};
}
}
我看過德Cateljau的算法,並假定我需要的是某種形式的,但我很茫然,以如何去實現它,因爲我每次看到例如基本平該曲線未找到手柄的X,Y位置。
這樣做的伎倆,謝謝! – javram