點和解析式有關的操作

代碼

方法

// 遍歷所有拐點生成解析式
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"]
}];
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章