| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- var nadInterBreakout = require("./nadInterBreakout");
- module.exports = function(pin, ct) {
- // force computation by decreasing by 1e-7 to be as closed as possible
- // from computation under C:C++ by leveraging rounding problems ...
- var t = {
- x: (pin.x - 1e-7) / ct.del[0],
- y: (pin.y - 1e-7) / ct.del[1]
- };
- var indx = {
- x: Math.floor(t.x),
- y: Math.floor(t.y)
- };
- var frct = {
- x: t.x - 1 * indx.x,
- y: t.y - 1 * indx.y
- };
- var val = {
- x: Number.NaN,
- y: Number.NaN
- };
- var temp = nadInterBreakout(indx, frct, 'x', 0, ct);
- if (temp) {
- indx = temp[0];
- frct = temp[1];
- }
- else {
- return val;
- }
- temp = nadInterBreakout(indx, frct, 'y', 1, ct);
- if (temp) {
- indx = temp[0];
- frct = temp[1];
- }
- else {
- return val;
- }
- var inx = (indx.y * ct.lim[0]) + indx.x;
- var f00 = {
- x: ct.cvs[inx][0],
- y: ct.cvs[inx][1]
- };
- inx++;
- var f10 = {
- x: ct.cvs[inx][0],
- y: ct.cvs[inx][1]
- };
- inx += ct.lim[0];
- var f11 = {
- x: ct.cvs[inx][0],
- y: ct.cvs[inx][1]
- };
- inx--;
- var f01 = {
- x: ct.cvs[inx][0],
- y: ct.cvs[inx][1]
- };
- var m11 = frct.x * frct.y,
- m10 = frct.x * (1 - frct.y),
- m00 = (1 - frct.x) * (1 - frct.y),
- m01 = (1 - frct.x) * frct.y;
- val.x = (m00 * f00.x + m10 * f10.x + m01 * f01.x + m11 * f11.x);
- val.y = (m00 * f00.y + m10 * f10.y + m01 * f01.y + m11 * f11.y);
- return val;
- };
|