將一個四邊形按等比劃分,求線段座標

將一個四邊形按等比劃分,得出線段座標(不包含外層矩形的邊),還可根據外層矩形+所有線段座標得出所有多邊形的座標。

/*
* @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));

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章