贝塞尔曲线的阶数越高,需要的控制点就越多。二次曲线是二阶贝塞尔曲线,它们需要一个控制点。具有两个控制点的贝塞尔曲线是三阶的。一阶贝塞尔曲线实际上是一条直线。没有有限阶的贝塞尔曲线可以形成完美的圆弧。
顺便说一句,二次曲线不是“椭圆或其他东西”,而是抛物线段。
如果你想有圆弧,你应该使用......好吧圆弧!要控制它,您需要更改半径,实际上您可以通过移动圆心来实现。
您将需要额外的逻辑来处理直线,因为圆弧永远不是直线。因此,如果拖动点在直线上方,您将绘制一条线,否则您将绘制具有适当半径的圆弧。
因此,假设您有以下情况:
线段ab
是矩形的直线并且acb
是所需的弧线。y
是段的高度,x
是拖动的水平偏移量。我们正在寻找由三个点和定义的圆的r
半径。a
c
b
现在角度sda
是转角/4,sd
isr - x
和ad
is y / 2
。如果我们使用毕达哥拉斯,我们会得到:
r^2 = (r-x)^2 + (y/2)^2
=>
r^2 = (r-x)(r-x) + (y/2)^2
=>
r^2 = r^2 - 2rx + x^2 + (y/2)^2
=>
r^2 = r^2 - 2rx + x^2 + (y^2/4)
=>
0 = - 2rx + x^2 + (y^2/4)
=>
2rx = x^2 + (y^2/4)
=>
r = (x^2 + (y^2/4)) / 2x
=>
r = ((x^2) / 2x) + ((y^2/4) / 2x)
=>
r = (x/2) + ((y^2/4) / 2x)
=>
r = (x/2) + (y^2/8x)
正如你所看到的,什么时候x
是 0,我们有除以 0。这就是为什么当这种情况发生时你必须切换到画直线。
我们找到的公式(r = (x/2) + (y^2/8x)
)您将能够确定圆的半径来绘制圆弧。找到中心点是微不足道的......
要找到角度,您可以根据自己的喜好使用正弦定律或余弦定律,两者都可以很好地工作。您可以选择使用三角形asb
、三角形asd
或三角形adc
(绿色)来查找角度。
对于一个简单的方法,让我们继续三角形asd
,让我们使用正弦定律:
r / sin(turn/4) = (y/2) / sin(θ/2)
由于四分之一圈的正弦为 1,我们可以替换它:
=>
r / 1 = (y/2) / sin(θ/2)
=>
1 = (y/2) / sin(θ/2)
现在,解决它的角度:
=>
sin(θ/2) = (y/2)
=>
θ/2 = asin(y/2)
调用函数绘制圆弧时,起始角度为-θ/2,结束角度为θ/2。
注意:所有这些都是为矩形的右侧进行的,其他边需要调整。