任意多边形的最大内切圆算法

本文介绍了一种算法思想,用于找到任意多边形的最大内切圆。首先,通过将空间等分为网格并剔除非三角形区域内的点,然后找到最远距离点作为种子点,以该点为中心进行区域剖分并迭代。代码部分提供了找到内切圆的函数,以及用于判断点是否在多边形内的辅助函数。文章强调输入点需按顺时针顺序,并给出了C++实现,利用了opencv的Point3f表示点。
摘要由CSDN通过智能技术生成

一 算法思想
网上找内切圆算法没找到理想的,在国外看到一篇文章,作者本人也有源码,编译没通过,自己重新写了下,实现了功能在 这里插入图来源  片描述

上图中在三角形形成的二维平面区域中,高度为H,宽度为W。将空间进行等分,高度为n份,宽度为m份,每份为H/n,W/m份
在空间形成网格,将三角区域外的点剔除掉。再剩下的点中,对每个点而言,找出到边最近的距离。这样在很多点中找出最大的距离点。这个点作为种子点。以种子点为中心的区域再剖分,循环迭代
二.代码部分

#define N_CELLS 20
#define M_CELLS 20
int  FindInscribedCircleCenter(vector<cv::Point3f> polygon, double* output)
{

	if (polygon.size() <= 1)
		return 0;
	float bounds[4] = {10000,-10000,100000,-10000};
	for (int i = 0; i < polygon.size(); i++)
	{
		cv::Point3f pt = polygon[i];
		if (pt.x < bounds[0]) bounds[0] = pt.x;
		if (pt.x > bounds[1]) bounds[1] = pt.x;
		if (pt.y < bounds[2]) bounds[2] = pt.y;
		if (pt.y > bounds[3]) bounds[
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值