public Vector4 Displacement(Vector4[] c, Vector4 x) { // c=[p;q]; x=[0, x,y,z] // c:x -> (q*x - 2*p)*Inv(q); Vector4 p = c[0], q = c[1]; Vector4 newPoint = H.Mult(H.Mult(p, x) + 1.0f * q, H.Invers(p)); return(newPoint); }
//!!!!!!!! MAKE IT flat -> from x2for to x1for and make it parallelible (is it possible?) // make sense first make as a JobFor, second - Execute() stuff because for is not an independent public List <Vector4> GenerateCurve() { // qt-pwf(t); pt-wf(t); // Visis C(t) bus Img(H) List <Vector4> curve = new List <Vector4>(); Vector4 Ft, Wt; for (int t = 0; t < timeList.Count; t++) { Ft = new Vector4(0, 0, 0, 0); // q(t) Wt = new Vector4(0, 0, 0, 0); // p(t) List <float> fiList = getFiList(timeList[t]); for (int i = 0; i < TList.Count; i++) { //t yra rezoliucijos delta step if (points.Count == 5) { Ft += H.Mult(points[i * 2], weights[i]) * fiList[i]; } else { Ft += H.Mult(points[i], weights[i]) * fiList[i]; } Wt += weights[i] * fiList[i]; } //print(Wt+" "+Ft); // Su sitais kazkaip veike: /* * if (true) { * Vector4[] cDH_Mesh = {Ft, H.Invers(Wt)}; * Vector4[] cDH_Obj = {Wt,Ft}; * cDH_List_Mesh.Add(cDH_Mesh); * cDH_List_Obj.Add(cDH_Obj); * } */ Vector4[] cDH = { Wt, Ft }; cDH_List.Add(cDH); //Vector4[] cDH = {Wt,Ft}; curve.Add(H.Mult(Ft, H.Invers(Wt))); //curve.Add(Displacement(cDH, new Vector4(0,0,0,0))); } return(curve); }