用Java绘制bezier曲线

用Java绘制bezier曲线,java,swing,bezier,Java,Swing,Bezier,我需要创建一个简单的Java程序,通过任意数量的点逐像素绘制贝塞尔曲线。目前,一切似乎都正常,除了曲线始终在x=0 y=0坐标处结束 截图1 截图2 我需要它在最后一点结束。我的大脑今天不太正常,所以我在寻求帮助 以下是我所拥有的: private void drawsecene(){ precision=Float.parseFloat(this.jTextField4.getText()); //清除屏幕并绘制X和Y线 g、 setColor(Color.white); g、 fillR

我需要创建一个简单的Java程序,通过任意数量的点逐像素绘制贝塞尔曲线。目前,一切似乎都正常,除了曲线始终在x=0 y=0坐标处结束

截图1

截图2

我需要它在最后一点结束。我的大脑今天不太正常,所以我在寻求帮助

以下是我所拥有的:

private void drawsecene(){
precision=Float.parseFloat(this.jTextField4.getText());
//清除屏幕并绘制X和Y线
g、 setColor(Color.white);
g、 fillRect(0,0,pWidth,pHeight);
g、 setColor(颜色为灰色);
g、 抽绳(0,偏置,宽度,偏置);
g、 抽绳(偏置,0,偏置,pHeight);
//划清界限
如果(点计数>0){
对于(int i=0;i 1){
浮动t=0;
而(tRai,
“pointcount”设置在哪里(以及设置到什么位置)?
您是否尝试过单步遍历代码,以了解它在到达最后一点后为何继续?
是否有可能在额外的时间内通过一个循环1,这就是为什么最后一个点的目的地设置为(0,0)?
你能为应用程序设置每个点的步数吗

希望我能提出一些观点来帮助你找到答案

*编辑:如果我不得不猜测-您无意中向点[]添加了一个额外的点(0,0);下面是我看到它在最后一个点之后转到(0,0)的位置:

for(int i = 0; i < pointCount;  i++){
    sumX += bPoly[i] * **points[i]**.x;
    sumY += bPoly[i] * **points[i]**.y;
}
for(int i=0;i
编辑:很高兴你能解决这个问题,希望我能帮助你找到这个问题。祝你以后好运!

问题就在这里

for(int i = 0; i < pointCount; i++){
    bPoly[i] = bernstein(t, pointCount, i+1);
}

如果将Bernstein方法中的
Math.pow(1-t,n-i)
更改为:
Math.pow(1-t,n+1-i)
,会发生什么情况?@Rekin我很难将阶乘方法的边值转换为维基百科中的边值:如果(int i=0;i,会发生什么情况
你对(int i=0;i)使用阶乘函数提出了一点警告:使用“真实数学”计算二项式项会很快出错,因为数字太大。另一方面,直接构建帕斯卡三角形值要快得多/便宜得多,而且很容易计算到几乎任意深度,“如何实现”部分。我用System.out.println(Arrays.toString(points))检查了points对象,似乎没有任何额外的点;
for(int i = 0; i < pointCount; i++){
    bPoly[i] = bernstein(t, pointCount, i+1);
}
bPoly[i] = bernstein(t, pointCount-1, i+1);