將一個四邊形按等比劃分,得出線段座標(不包含外層矩形的邊),還可根據外層矩形+所有線段座標得出所有多邊形的座標。
/*
* @params ABCD分別對應四邊形的左上、右上、右下、左下,順時針方向
*/
/*
* @params coord [Array([])] 二維數組,存放多邊形的定點座標,順時針
*/
function Polygon (coord) {
for (var i = 0, len = coord.length; i < len; i++) {
this[String.fromCharCode(65 + i)] = coord[i];
}
}
Polygon.prototype._getDisCoord = function (a, b, curIndex, length) {
return a - (a - b) * curIndex / length;
}
Polygon.prototype._dealCoord = function (a, b, splitLineNum) {
var splitAreaNum = splitLineNum + 1; // 分成了多少份線段
var result = [];
for (var i = 1; i < splitAreaNum; i++) {
var x = this._getDisCoord(a[0], b[0], i, splitAreaNum);
var y = this._getDisCoord(a[1], b[1], i, splitAreaNum);
result.push([x, y]);
}
return result;
}
/*
* @fn getVerCoord 內部繪製線是水平方向時,各點的座標
* @params splitLineNum [int] 等分線個數
* @return 返回值座標從上至下
*/
Polygon.prototype.getHorCoord = function(splitLineNum) {
var leftCoor = this._dealCoord(this.D, this.A, splitLineNum);
var rightCoor = this._dealCoord(this.C, this.B, splitLineNum);
return {
left: leftCoor,
right: rightCoor
}
};
/*
* @fn getVerCoord 內部繪製線是豎直方向時,各點的座標
* @params splitLineNum [int] 等分線個數
* @return 返回值座標從左至右
*/
Polygon.prototype.getVerCoord = function(splitLineNum) {
var topCoor = this._dealCoord(this.A, this.B, splitLineNum);
var bottomCoor = this._dealCoord(this.D, this.C, splitLineNum);
return {
top: topCoor,
bottom: bottomCoor
}
};
// var polygon = new Polygon([[1, 10], [10, 10], [10, 1], [1, 1]]);
var polygon = new Polygon([[0, 10], [20, 20], [10, 1], [1, 1]]);
console.log(polygon.getHorCoord(3));
console.log(polygon.getVerCoord(3));