凸多边形轮廓点缩放

凸多边形轮廓点集按照中心等比例进行缩放,不支持凹多边形

1、记录原始box中心位置(相对原点的center(offsetx,offsety)),将所有坐标点转换到原点对应位置,然后对中心到各个顶点的向量进行等比例缩放,对缩放后的顶点按照原始中心偏移量进行平移,旋转等各个功能可同理实现。

 2、凹多边形可能出现的问题

 

 

struct Rect
{
    double xmin;
    double ymin;
    double xmax;
    double ymax;
};
struct Point2f
{
    double x;
    double y;
};//需提供+ - *等运算符重载,或直接使用opencv

//获取多边形点集box,返回box中心
Point2f getPolygonCenter(const vector<Point2f>& _polygon)
{
	Rect d_bound;
	int _polsize = _polygon.size();
	if (_polsize < 1)
		return Point2f();
	for (int i = 0; i < _polsize; i++) {
		if (0 == i) {
			d_bound.xmin = _polygon[0].x;
			d_bound.ymin = _polygon[0].y;
			d_bound.xmax = _polygon[0].x;
			d_bound.ymax = _polygon[0].y;
		}
		else {
			if (_polygon[i].x < d_bound.xmin)
				d_bound.xmin = _polygon[i].x;
			if (_polygon[i].y < d_bound.ymin)
				d_bound.ymin = _polygon[i].y;
			if (_polygon[i].x > d_bound.xmax)
				d_bound.xmax = _polygon[i].x;
			if (_polygon[i].y > d_bound.ymax)
				d_bound.ymax = _polygon[i].y;
		}
	}
	return Point2f((d_bound.xmax + d_bound.xmin) / 2, (d_bound.ymax + d_bound.ymin) / 2);
}

//仅支持凸多边形
//expand:缩放比例,大于1放大,小于1缩小
vector<Point2f> SuoXiao(vector<Point2f>& polygon, double expand)
{
	auto center = getPolygonCenter(polygon);
	vector<Point2f> vector_origin;
	for (size_t i = 0; i < polygon.size(); i++)
	{
		vector_origin.push_back((polygon[i] - center) * expand + center);
	}
	return vector_origin;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值