Basically i have made code to draw Bezier curves but there is something wrong with it, it is not drawing how its suposed to. Core of this code should be correct, it was from one of my clases.
public class Bezier {
double[][] pointsY;
double[][] pointsX;
double t;
public Bezier(double[][] pointsX, double[][] pointsY, double t) {
this.pointsY = pointsY;
this.pointsX = pointsX;
this.t = t;
}
public void drawCurveNormalize (G_Graphics graphic){
double[][] constants = {{1,0,0,0},
{-3,3,0,0},
{3,-6,3,0},
{-1,3,-3,1} };
t = 1/t;
double[][] tValues = {{1,t,t*t,t*t*t}};
double[][] multiX = Util.matrixMultiplication(constants,pointsX);
double[][] multiY = Util.matrixMultiplication(constants,pointsY);
double[][] multi1;
double[][] multi2;
int dY = 0;
int dX = 0;
int xBeginning = (int)pointsX[0][0];
int yBeginning = (int)pointsY[0][0];
/*graphic.DDA(pointsX[0][0],pointsY[0][0],pointsX[1][0],pointsY[1][0],G_Color.G_cBlack);
graphic.DDA(pointsX[1][0],pointsY[1][0],pointsX[2][0],pointsY[2][0],G_Color.G_cBlack);
graphic.DDA(pointsX[2][0],pointsY[2][0],pointsX[3][0],pointsY[3][0],G_Color.G_cBlack);*/
for (double i = t; i < 1; i+=t) {
double z = 1;
for (int j = 0; j < 3; j++) {
tValues[0][j] = z;
z = z*i;
}
multi1 = Util.matrixMultiplication(tValues,multiX);
dX = (int)multi1[0][0];
multi2 = Util.matrixMultiplication(tValues,multiY);
dY = (int)multi2[0][0];
graphic.DDA(xBeginning,yBeginning,dX,dY,G_Color.G_cBlack);
xBeginning = dX;
yBeginning = dY;
}
}
input points are here
double pointsX[][] = new double[][]
{ {10},
{100},
{100},
{350},
};
double pointsY[][] = new double[][]
{ {10},
{10},
{200},
{200},
};
Bezier bezier = new Bezier(pointsX, pointsY,10);
and it drawes this
but it should draw betwen those lines
also here is my code for MatrixMultiplication
public static double[][] matrixMultiplication(double[][] matrix1, double[][] matrix2) {
if (matrix1[0].length != matrix2.length) {
throw new RuntimeException("Matrix column/row fail");
}
double[][] matrixRet = new double[matrix1.length][matrix2[0].length];
for (int i = 0; i < matrix1.length; i++) {
for (int j = 0; j < matrix2[0].length; j++) {
matrixRet[i][j] = 0.0;
}
}
for (int i = 0; i < matrix1.length; i++) {
for (int j = 0; j < matrix2[0].length; j++) {
for (int k = 0; k < matrix1[0].length; k++) {
matrixRet[i][j] += matrix1[i][k] * matrix2[k][j];
}
}
}
return matrixRet;
}
question from:
https://stackoverflow.com/questions/66047918/bezier-curve-method-drawing-wrong-in-java