【发布时间】:2013-12-01 17:44:06
【问题描述】:
Java2D API 支持的最复杂的形状是贝塞尔线段。假设我要绘制有理线段(每个控制点都有一个权重,整个渲染公式略有不同)。
如何做到这一点?
是否可以扩展渲染引擎以绘制更复杂的形状?
更新
实现自定义形状的常用方法是实现Shape 接口。该接口具有返回PathIterator 而PathIterator 迭代段类型的关键方法。只有 5 种细分类型。其中最弯曲的是SEG_CUBICTO,这是标准的贝塞尔曲线,有4个控制点(包括开始和结束2个)。
如果我对贝塞尔曲线应用线性分数变换,每个控制点都会获得一个权重,作为其坐标的补充,贝塞尔曲线会转向 NURBS(不确定,未能学习确切的术语)。无论如何,曲线的公式与贝塞尔曲线不同。
【问题讨论】:
-
我不是 java2d 专家,但基于 javadocs,所有形状都实现了
Shape接口,所以如果你想要复杂和定制的东西,我可以这么说 -
是的,但是
Shape返回PathIterator,而PathIterator只返回固定数量的段类型,其中最复杂的是SEG_CUBICTOdocs.oracle.com/javase/7/docs/api/java/awt/geom/… -
看看这个例子,也许这会给你一些想法82.157.70.109/mirrorbooks/javaexamples/…
-
没有办法,您的
Shape实现必须将曲线转换为一系列直线、四边形或三次曲线。但是如果行足够短,那么逐点迭代没有区别。 -
@Holger 理论上可以重新定义或子类化一些底层渲染类,就像使用 Sound API 一样。
标签: java graphics java-2d bezier nurbs