OpenCV 学习笔记-day16 正多边形绘制demo

OpenCV 学习笔记

day16 随机数与随机颜色

给定边数n,中点坐标Point p;p.a(横坐标),p.b(纵坐标)和中点到顶点的距离d, 来绘制多边形

首先确定多边形每一条边的旋转角度 angle,并转成弧度制,这个角度指的是中点到顶点连线与x轴的夹角
double angle = 360.0 / n / 180.0PI;
找到顶点坐标与旋转角度和中心点坐标的关系(注意第一次的旋转角度为0)
for (int i = 0; i < n; i++)
{
Point p;
p.x = a + d
cos(iangle-45.0 / 180.0PI);
p.y = b + dsin(iangle-45.0 / 180.0*PI);
pts_4.push_back( p );
}

定义一个 Point类型的vector,将每个旋转后的坐标 p push_back进去
pts_4.push_back( p);

记得一定要有封口的坐标数据,故将第一个获取的坐标再push_back进去一次
pts_4.push_back(pts_4[0]);
最后利用polylines绘制
polylines(duobainxing, pts_4, true, Scalar(0, 0, 255), 2, 8, 2);
在这里插入图片描述

void QuickDemo::polygon_drawing_demo_2()
{
	int n;//边数
	int d;//多边形中心点到角的距离
	int a, b;//多边形中心点的坐标
	std::cout << "请输入多边形的边数:" << std::endl;
	std::cin >> n;
	std::cout << "请输入多边形中心点的坐标:" << std::endl;
	std::cin >> a >> b;
	std::cout << "请输入多边形中心点到角的距离:" << std::endl;
	std::cin >> d;
	double angle = 360.0 / n / 180.0*PI;
	std::vector<Point> pts_4;
	for (int  i = 0; i < n; i++)
	{
		Point p;
		p.x = a + d*cos(i*angle);
		p.y = b + d*sin(i*angle);
		pts_4.push_back(p);
	}
	pts_4.push_back(pts_4[0]);
	Mat duobainxing = Mat::zeros(Size(512, 512), CV_8UC3);
	polylines(duobainxing, pts_4, true, Scalar(0, 0, 255), 2, 8, 2);
	imshow("多边形绘制", duobainxing);
}

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值