一 算法思想
网上找内切圆算法没找到理想的,在国外看到一篇文章,作者本人也有源码,编译没通过,自己重新写了下,实现了功能
上图中在三角形形成的二维平面区域中,高度为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[