Java2D API支持的最复杂的形状是贝塞尔段。假设我想绘制有理段(每个控制点都有一个权重,整个渲染公式略有不同)。
如何做到这一点?
是否可以扩展渲染引擎以能够绘制更复杂的形状?
更新
实现自定义形状的常用方法是实现Shape
接口。此接口具有在迭代段类型时返回PathIterator
的关键方法PathIterator
。只有 5 种段类型。其中曲线最陡峭的是SEG_CUBICTO
,这是标准贝塞尔曲线,有4个控制点(包括2个起点和终点)。
应用线性分数变换,每个控制点都会得到一个权重,作为其坐标的补充,贝塞尔曲线转向 NURBS(不确定,未能学习确切的术语)。无论如何,曲线的公式与贝塞尔不同。
您无法真正扩展渲染引擎:您可以创建 Graphics/Graphics2D 子类,但您无法控制实例化,因此您无法强制绘图框架将您的子类传递给绘制方法。
您可以做的是创建一个 Shape 的 RationalShape 实现,该实现具有绘制您喜欢的任何内容的方法,并返回一个 PathIterator,该路径使用贝塞尔样条近似它。作为像Photoshop这样的图形程序的用户,我发现每条曲线都可以用贝塞尔样条很好地近似,我不知道这种近似背后的数学会有多复杂。