我有问题。假设我们有一个由四个控制点定义的三次贝塞尔曲线。现在假设,曲线是从一个点切出的,每个线段再次使用三次贝塞尔曲线表示。那么,现在如果给我们两个这样的贝塞尔曲线 B1 和 B2,有没有办法知道它们是否可以连接起来形成另一个贝塞尔曲线 B?这是为了通过连接两条曲线来简化几何图形并减少控制点的数量。
最佳答案
关于这个问题的一些想法。
我建议有初始贝塞尔曲线 P0
- P3
带控制点 P1
和 P2
让我们在参数 ta 和 tb 处进行两个分割。
我们现在有两条子曲线(黄色)- P0
- PA3
和 PB0
- P3
.
蓝色间隔丢失。PA1
和 PB2
- 已知的控制点。我们要寻找未知P1
和 P2
.
一些方程
初始曲线:
C = P0*(1-t)^3+3*P1(1-t)^2*t+3*P2*(1-t)*t^2+P3*t^3
端点:
PA3 = P0*(1-ta)^3+3*P1*(1-ta)^2*ta+3*P2*(1-ta)*ta^2+P3*ta^3
PB0 = P0*(1-tb)^3+3*P1*(1-tb)^2*tb+3*P2*(1-tb)*tb^2+P3*tb^3
小曲线的控制点
PA1 = P0*(1-ta)+P1*ta => P1*ta = PA1 – P0*(1-ta)
PB2 = P2*(1-tb)+P3*tb => P2(1-tb) = PB2 – P3*tb
现在代入 PA3 方程中的未知点:
**PA3***(1-tb) = **P0***(1-ta)^3*(1-tb)+3*(1-ta)^2*(1-tb)*(**PA1** – **P0***(1-ta))+3*(1-ta)*ta^2*( **PB2** – **P3***tb)+**P3***ta^3*(1-tb)
(由于 SO 格式,一些乘号已丢失)
这是向量方程,它包含两个未知数的两个标量方程
ta
和 tb
PA3X*(1-tb) = P0X*(1-ta)^3*(1-tb)+3*(1-ta)^2*(1-tb)*(PA1X – P0X*(1-ta))+3*(1-ta)*ta^2*( PB2X – P3X*tb)+P3X*ta^3*(1-tb)
PA3Y*(1-tb) = P0Y*(1-ta)^3*(1-tb)+3*(1-ta)^2*(1-tb)*(PA1Y – P0Y*(1-ta))+3*(1-ta)*ta^2*( PB2Y – P3Y*tb)+P3Y*ta^3*(1-tb)
这个系统可以通过数值和分析来解决(实际上 Maple 用非常大的三次公式来解决它:()
如果我们有一些错误的点,那么为某些点(
PA3
、 PB0
、 PA2
、 PB1
)建立超定方程系统并对其进行数值求解以最小化偏差是有意义的。
关于graphics - 连接贝塞尔曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8054405/