根据线将相交的 3 个点制作贝塞尔曲线

Making a Bezier curve based on 3 points the line will intersect

二次贝塞尔曲线需要these three points, but I do not have an ordered pair of p1. Instead, I have the ordered pair of points here

中点(P1)是抛物线的最高点。

抛物线两边相等

如何使用图像 2 中的点从图像 1 中获取 3 个点?

应用 https://pomax.github.io/bezierinfo/#abc 中解释的知识,您应该可以开始了。您需要确定"somewhere on the curve"点的时间值,然后您可以使用投影比例的公式来找到实际控制点坐标。

但是,在 t=0.5 时,比率仅为“1:1”,因此事情变得更加容易,因为您的点投影到连接第一个点和最后一个点以及实际控制点的直线的中点是相同的距离 "above" 您的点与该点位于该线上方:

因此您只需计算中点:

m = 
  x: (p1.x + p2.x) / 2
  y: (p1.y + p2.y) / 2

以及从 "p2 you have" 点到中点的 x 和 y 距离:

d =
  x: (p2.x - m.x)
  y: (p2.y - m.y)

然后真正的 p2 就是与 "p2 you have":

的距离
real2 = 
  x: p2.x + d.x
  y: p2.y + d.y

但是,请注意此 适用于 t=0.5:start--end 线上的投影点和距离比率将(可能非常)不同对于任何其他 t 值,您应该使用贝塞尔底漆所讨论的公式。

另请注意,您所说的 "the peak" 绝不能保证在 t=0.5 时...例如,看看这条曲线:

标记为属于 t=0.5 的点肯定不是你所说的曲线的 "peak" 所在的位置(实际上,它更接近 t=0.56),所以如果你有是三分,你在技术上 总是 有不完整的信息,你将不得不发明一些规则来决定如何填充缺失的位。在这种情况下 "what t value do I consider my somewhere-on-the-curve point to be?".