找到二次曲线的控制点

问题描述 投票:0回答:1

我有曲线的起点和终点以及曲线的顶点。我想知道如何获得控制点?

我有一个带有链接的图表。当链接位于节点上时,我希望链接避开节点。 所以我恢复了我想要作为最高点的点。

 let x = node.GetX  + node.GetRadius * Math.sin(angle) + 10 * Math.sign(Math.sin(angle))
 let y = node.GetY  + node.GetRadius * Math.cos(angle) + 10 * Math.sign(Math.cos(angle))

我的 t 也介于 0 和 1 之间

let t = Distance(link.GetFrom.GetX, link.GetFrom.GetY, perpendicular.x, perpendicular.y).distance / Distance(link.GetFrom.GetX, link.GetFrom.GetY, link.GetTo.GetX, link.GetTo.GetY).distance

我也有起点和终点之间的线上的点。

let perpendicular = PerpendicularIntersection(link.GetFrom.GetPosition, link.GetTo.GetPosition,{x:node.GetX, y:node.GetY})

我尝试了这个论坛和 gpt 的不同公式,但没有什么好处。 研究

提前感谢您的帮助

javascript point curve bezier quadratic
1个回答
0
投票

export function FindControlPoint(s_x, s_y, t_x, t_y, e_x, e_y, rate=1) {
    const mid_x = (s_x + e_x) / 2
    const mid_y = (s_y + e_y) / 2
    return { x: mid_x + (t_x - mid_x) * rate,
             y: mid_y + (t_y - mid_y) * rate }
}

© www.soinside.com 2019 - 2024. All rights reserved.