相关疑难解决方法(0)

解释 - 通过控制点曲线的公式

我有一个关于通过控制点弯曲公式的问题.如你所知,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度.

这会重新计算控制点位置.

我从一本书中得到了这个公式,但是这本书没有解释它是如何衍生出来的.我试过谷歌但是徒劳无功.

谁知道这个公式是如何衍生出来的?

谢谢,维恩.

math bezier canvas formula quadratic

7
推荐指数
1
解决办法
1936
查看次数

Undestanding UIBezierPath弯曲机制,controlPoint和曲线点

我正在尝试使用简单的抛物线形状UIBezierPath.我有一个maxPoint和一个boundingRect我基于抛物线的宽度和伸展.
下面是我做得出抛物线(我画在容器视图中的抛物线,该功能rectcontainer.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值的不同点中它表现不同.似乎有某种乘数被添加,我该如何解决?

graphics ios uibezierpath swift

4
推荐指数
1
解决办法
6430
查看次数

标签 统计

bezier ×1

canvas ×1

formula ×1

graphics ×1

ios ×1

math ×1

quadratic ×1

swift ×1

uibezierpath ×1