y = 0,\r
that = this,\r
bezier = function (x1, y1, x2, y2, x3, y3, x4, y4) {\r
- return function (t) {\r
- x = (x4-3*(x3-x2)-x1)*t*t*t + 3*(x3-2*x2+x1)*t*t + 3*(x2-x1)*t + x1;\r
+ return function (x) {\r
+ var a = [x4-3*(x3-x2)-x1, 3*(x3-2*x2+x1), 3*(x2-x1), x1-x];\r
+ /*三次方程式の解から、ベジェ曲線のyを求める*/\r
+ var s = Math.carda(a),\r
+ i = 0,\r
+ si,\r
+ t = 0;\r
+ while (s[i]) {\r
+ si = s[i];\r
+ if ((si.i === 0) && (si.r <= 1) && (si.r >= 0)) {\r
+ t = si.r;\r
+ }\r
+ ++i;\r
+ }\r
+ console.log(t);\r
y = (y4-3*(y3-y2)-y1)*t*t*t + 3*(y3-2*y2+y1)*t*t + 3*(y2-y1)*t + y1;\r
+ console.log(s, y);\r
return f(y);\r
};\r
},\r
/*共役複素数*/\r
x.push( { \r
r: x[x.length-1].r,\r
- i: - x[x.length].i\r
+ i: - x[x.length-1].i\r
} );\r
return x;\r
} else {\r
calc.to.from = from;\r
expect(calc.call()(1)).toBe(b(1).y+".0");\r
calc.to.from = from;\r
- expect(calc.call()(0.5)).toBe(b(0.5).y.toFixed(1));\r
+ expect(calc.call()( b(0.5).x )).toBe(b(0.5).y.toFixed(1));\r
\r
var ff = function(k) {\r
calc.keySplines = k;\r
calc.to.degit = 10;\r
var b = bezier(0,0, k[0],k[1], k[2],k[3], 1,1),\r
- epsiron = 0.00001; //誤差\r
+ epsiron = 1e-10; //誤差\r
expect(calc.call()(0)).toBe(b(0).y.toFixed(10));\r
calc.to.from = from;\r
expect(calc.call()(1)).toBe(b(1).y.toFixed(10));\r