3

Java2D API 支持的最复杂的形状是贝塞尔线段。假设我要绘制有理线段(每个控制点都有一个权重,整个渲染公式略有不同)。

如何做到这一点?

是否可以扩展渲染引擎以绘制更复杂的形状?

更新

实现自定义形状的常用方法是实现Shape接口。PathIterator此接口具有在PathIterator迭代段类型时返回的关键方法。只有 5 种细分类型。其中最弯曲的SEG_CUBICTO是标准贝塞尔曲线,有 4 个控制点(包括开始和结束各 2 个)。

如果我对贝塞尔曲线应用线性分数变换,每个控制点都会得到一个权重,作为其坐标的补充,贝塞尔曲线会变成 NURBS(不确定,未能学习确切的术语)。无论如何,曲线的公式与贝塞尔曲线不同。

4

1 回答 1

0

您不能真正扩展渲染引擎:您可以创建 Graphics/Graphics2D 子类,但您无法控制实例化,因此您不能强制绘图框架将您的子类传递给绘画方法。

您可以做的是创建 Shape 的 RationalShape 实现,该实现具有绘制您喜欢的任何东西的方法,并返回一个使用贝塞尔样条曲线逼近它的 PathIterator。作为 Photoshop 等图形程序的用户,我发现每条曲线都可以用 Bézier 样条曲线很好地逼近,我不知道这种逼近背后的数学会有多复杂。

于 2013-11-20T14:12:00.890 回答