代碼
方法
function getAllAnalytical() {
temp2 = inflectionPoint.concat();
for(let i = 0; i < inflectionPoint.length; i++) {
var pp = inflectionPoint[i];
for(let i = 0; i < pp.nearPoint.length; i++) {
analyticals.push(getAnalytical(pp, inflectionPoint[pp.nearPoint[i] - 1]));
}
}
return AnalyticalsMoveRepeat(analyticals)
}
function AnalyticalsMoveRepeat(analyticals) {
for(var i = 0; i < analyticals.length; i++) {
for(var j = 1; j < analyticals.length - 1; j++) {
if(i < analyticals.length) {
if(checkAnalytical(analyticals[i], analyticals[j])) {
analyticals.splice(j, 1);
}
}
}
}
return analyticals;
}
function checkAnalytical(a1, a2) {
var k1 = a1.k,
k2 = a2.k,
b1 = a1.b,
b2 = a2.b,
d1 = a1.d,
d2 = a2.d;
var x11 = a1.p1.x,
x12 = a1.p2.x,
x21 = a2.p1.x,
x22 = a2.p2.x;
var y11 = a1.p1.y,
y12 = a1.p2.y,
y21 = a2.p1.y,
y22 = a2.p2.y;
if(k1 == k2 && b1 == b2 && d1 == d2) {
if(x11 == x22 && x12 == x21 && y11 == y22 && y12 == y21) {
return true;
}
}
return false;
}
function getAnalytical(a, b) {
var x1 = a.x,
x2 = b.x,
y1 = a.y,
y2 = b.y,
k, b, d;
if(x1 != x2) {
k = (y1 - y2) / (x1 - x2);
k = k.toFixed(2) * 1;
b = (x1 * y2 - x2 * y1) / (x1 - x2);
b = b.toFixed(2) * 1;
} else {
k = null;
b = null;
}
d = Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2));
d = d.toFixed(2) * 1;
var p1 = Point.createNew(x1, y1);
var p2 = Point.createNew(x2, y2);
var analytical = Analytical.createNew(p1, p2, k, b, d);
return analytical;
}
對象
var Point = {
createNew: function() {
var len = arguments.length;
var point = {};
switch(len) {
case 0:
point.x = 0;
point.y = 0;
break;
case 2:
point.x = arguments[0];
point.y = arguments[1];
break;
}
return point;
}
};
var Analytical = {
createNew: function() {
var len = arguments.length;
var analytical = {};
switch(len) {
case 5:
analytical.p1 = arguments[0];
analytical.p2 = arguments[1];
analytical.k = arguments[2];
analytical.b = arguments[3];
analytical.d = arguments[4];
break;
case 7:
analytical.p1 = Point.createNew(arguments[0], arguments[1]);
analytical.p2 = Point.createNew(arguments[2], arguments[3]);
analytical.k = arguments[4];
analytical.b = arguments[5];
analytical.d = arguments[6];
break;
}
return analytical;
}
}
模擬數據
inflectionPoint = [{
"id": 1,
"x": "36",
"y": "22.8",
"nearPoint": ["2", "5"]
}, {
"id": 2,
"x": "36",
"y": "176.8",
"nearPoint": ["1", "3", "6"]
}, {
"id": 3,
"x": "36",
"y": "328.8",
"nearPoint": ["2", "7", "4"]
}, {
"id": 4,
"x": "36",
"y": "474.8",
"nearPoint": ["3", "10"]
}, {
"id": 5,
"x": "999",
"y": "22.8",
"nearPoint": ["1"]
}, {
"id": 6,
"x": "612",
"y": "176.8",
"nearPoint": ["2"]
}, {
"id": 7,
"x": "652",
"y": "328.8",
"nearPoint": ["3", "8"]
}, {
"id": 8,
"x": "831",
"y": "281.80",
"nearPoint": ["7", "9"]
}, {
"id": 9,
"x": "999",
"y": "280.80",
"nearPoint": ["8"]
}, {
"id": 10,
"x": "999",
"y": "477.80",
"nearPoint": ["4"]
}];