我有一个关于通过控制点弯曲公式的问题.如你所知,HTML帆布具有quadraticCurveTo(x1, y1, x2, y2)与x1 and x2作为控制点.
但是,当您尝试使用它绘制笔划时,笔划将永远不会触及控制点.
所以我们有这个公式:
x1 = xt * 2 - (x0 + x2) / 2;
y1 = yt * 2 - (y0 + y2) / 2;
Run Code Online (Sandbox Code Playgroud)
(xt, yt)=你要弯曲的点.t切线,因为它在该点垂直90度.
这会重新计算控制点位置.
我从一本书中得到了这个公式,但是这本书没有解释它是如何衍生出来的.我试过谷歌但是徒劳无功.
谁知道这个公式是如何衍生出来的?
谢谢,维恩.
我正在尝试使用简单的抛物线形状UIBezierPath.我有一个maxPoint和一个boundingRect我基于抛物线的宽度和伸展.
下面是我做得出抛物线(我画在容器视图中的抛物线,该功能rect会container.bounds):
func addParabolaWithMax(maxPoint: CGPoint, inRect boundingRect: CGRect) {
let path = UIBezierPath()
let p1 = CGPointMake(1, CGRectGetMaxY(boundingRect)-1)
let p3 = CGPointMake(CGRectGetMaxX(boundingRect)-1, CGRectGetMaxY(boundingRect)-1)
path.moveToPoint(p1)
path.addQuadCurveToPoint(p3, controlPoint: maxPoint)
// Drawing code
...
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,我希望maxPoint我在函数中发送的是抛物线本身的实际极端点.例如,如果我发送(CGRectGetMidX(container.bounds), 0),最大点应该在最顶端的中心.但是在使用此特定点的函数时,结果如下:
那么这条道路究竟是什么呢?或者换句话说,我怎样才能从controlPoint我需要的实际最大点到达?我已经尝试根据y值的高度添加和减去值中的不同值boundingRect,但我找不到正确的组合,因为在具有不同y值的不同点中它表现不同.似乎有某种乘数被添加,我该如何解决?