graphics - 连接贝塞尔曲线

标签 graphics geometry bezier

我有问题。假设我们有一个由四个控制点定义的三次贝塞尔曲线。现在假设,曲线是从一个点切出的,每个线段再次使用三次贝塞尔曲线表示。那么,现在如果给我们两个这样的贝塞尔曲线 B1 和 B2,有没有办法知道它们是否可以连接起来形成另一个贝塞尔曲线 B?这是为了通过连接两条曲线来简化几何图形并减少控制点的数量。

最佳答案

关于这个问题的一些想法。
我建议有初始贝塞尔曲线 P0 - P3带控制点 P1P2
enter image description here

让我们在参数 ta 和 tb 处进行两个分割。
我们现在有两条子曲线(黄色)- P0 - PA3PB0 - P3 .
蓝色间隔丢失。PA1PB2 - 已知的控制点。我们要寻找未知P1P2 .

一些方程

初始曲线:

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 格式,一些乘号已丢失)

这是向量方程,它包含两个未知数的两个标量方程 tatb
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 用非常大的三次公式来解决它:()

如果我们有一些错误的点,那么为某些点( PA3PB0PA2PB1 )建立超定方程系统并对其进行数值求解以最小化偏差是有意义的。

关于graphics - 连接贝塞尔曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8054405/

相关文章:

php - 将 lat long 转换为 geojson 对象

javascript - 在谷歌地图中平铺连续的多边形

html - 如何将图像像素转换为 Canvas 中的S曲线形状

java - 碰撞检测: rounded object

svg - 用控制点关闭SVG路径(Z)?

math - 将多项式曲线转换为贝塞尔曲线控制点

algorithm - 寻找将图像映射到 4 边多边形的算法

javascript - 盒子的简单正投影

c# - 将面板保存到位图 c# Winforms

algorithm - 如何确定多个元素的边界矩形?