Java 如何获取曲线(形状)的点

Java 如何获取曲线(形状)的点,java,graphics,2d,curve,cubic,Java,Graphics,2d,Curve,Cubic,我有一个Java的CubicCurve,它由4个控制点定义。我可以画出最终的形状,但如何在给定的分辨率下有效地接收该形状的每个点? 顺便说一下,PathIterator“only”返回控制点,但不返回曲线本身的点。2D参数化三次曲线只是两个多项式 x(t)=ax0+ax1*t+ax2*t*t+ax3*t*t*t y(t)=ay0+ay1*t+ay2*t*t+ay3*t*t*t 其中t=因此,您可以从控制点计算a?0…a?3系数,然后以所需的小步循环t,以获得所需的所有点,例如dt=1.0/

我有一个Java的CubicCurve,它由4个控制点定义。我可以画出最终的形状,但如何在给定的分辨率下有效地接收该形状的每个点?
顺便说一下,PathIterator“only”返回控制点,但不返回曲线本身的点。

2D参数化三次曲线只是两个多项式

 x(t)=ax0+ax1*t+ax2*t*t+ax3*t*t*t
 y(t)=ay0+ay1*t+ay2*t*t+ay3*t*t*t
其中
t=
因此,您可以从控制点计算
a?0…a?3
系数,然后以所需的小步循环
t
,以获得所需的所有点,例如
dt=1.0/(n-1)
其中
n
是点数

系数取决于用于贝塞尔/样条曲线或插值的曲线参见:


设置曲线点阵列的原因是什么?对于大多数常见任务(检测点是否在曲线上,找到与直线相交的点,在曲线上设置动画),通常有一个公式。在我的例子中,我想使用曲线数据基于此曲线应用gamma校正。所以我需要尽可能多的离散点。所以这里你真的不需要点,而是传递函数
newBrightness=f(oldBrightness)
。显示你试图获取PathIterator最终PathIterator迭代器=曲线的代码。getPathIterator(null);while(!iterator.isDone()){final double[]coords=new double[6];iterator.currentSegment(coords);logger.info(coords[0]+“x”+coords[1]+“”+coords[2]+“x”+coords[3]+“”+coords[4]+“x”+coords[5]);iterator.next();}恐怕您在公式中使用的系数与Java中用于CubicCurve的系数不同:@Thomas,那么使用您所拥有的。。。如果可以从形状中提取系数,则无需计算它们。多项式方程
x(t),y(t)
将是相同的。唯一可以改变的是
t