将一个四边形按等比划分,求线段坐标

本文探讨如何将一个四边形按等比划分,详细阐述计算内部线段坐标的步骤,并说明如何结合外层矩形坐标得到所有细分多边形的坐标。
摘要由CSDN通过智能技术生成

将一个四边形按等比划分,得出线段坐标(不包含外层矩形的边),还可根据外层矩形+所有线段坐标得出所有多边形的坐标。

/*
* @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 [in
您好!要将一个不规则多边形根据纵坐标划分为若干个四边形,可以使用Qt的绘图功能来实现。以下是一个简单的函数实现示例: ```cpp #include <QPolygonF> #include <QPainter> void dividePolygon(const QPolygonF& polygon, qreal yDivide, QVector<QPolygonF>& dividedPolygons) { dividedPolygons.clear(); if (polygon.isEmpty()) return; // 找到多边形的最小和最大纵坐标值 qreal minY = polygon.first().y(); qreal maxY = minY; for (const QPointF& point : polygon) { if (point.y() < minY) minY = point.y(); if (point.y() > maxY) maxY = point.y(); } // 对于每个纵坐标划分点,将多边形划分四边形 qreal y = minY; while (y < maxY) { QPolygonF dividedPolygon; for (int i = 0; i < polygon.size(); ++i) { const QPointF& p1 = polygon[i]; const QPointF& p2 = polygon[(i + 1) % polygon.size()]; if ((p1.y() <= y && p2.y() > y) || (p1.y() > y && p2.y() <= y)) { // 计算交点的横坐标 qreal x = p1.x() + ((y - p1.y()) / (p2.y() - p1.y())) * (p2.x() - p1.x()); // 添加交点到划分多边形 dividedPolygon.append(QPointF(x, y)); } } // 根据横坐标排序 std::sort(dividedPolygon.begin(), dividedPolygon.end(), [](const QPointF& p1, const QPointF& p2) { return p1.x() < p2.x(); }); dividedPolygons.append(dividedPolygon); // 下一个坐标划分点 y += yDivide; } } ``` 使用示例: ```cpp // 定义一个不规则多边形 QPolygonF polygon; polygon << QPointF(100, 100) << QPointF(200, 50) << QPointF(300, 150) << QPointF(250, 300) << QPointF(150, 250); // 划分多边形为若干个四边形 qreal yDivide = 50; // 设置纵坐标划分间隔 QVector<QPolygonF> dividedPolygons; dividePolygon(polygon, yDivide, dividedPolygons); ``` 这样,您就可以得到按纵坐标划分的若干个四边形的集合`dividedPolygons`。每个`QPolygonF`对象表示一个四边形,可以根据需要进行处理或绘制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值