求多边形最大内切圆

BOOL CPline::FindIncircle(double a)//这是一个多段线类的成员函数,把其中的点设成参数就可以满足别的需求了

{

int Max=500;//设置最大循环次数

double sumx,sumy;

sumx=sumy=0; //其中,A 点是距离最近的点,B 点是次近的点

PointStruct A, B,C,O,O1,tempPt; //A,B,分别为最小,和次小距离的两个垂足,o 为设定初始计算圆心

float distf,dists,dist;

float distfn,distsn;// a 为步长因子

m_PointList[m_Number]=m_PointList[0]; //

for(int i=0;i

sumx+=m_PointList[i].x;

sumy+=m_PointList[i].y;

}

O.x=sumx/m_Number;

O.y=sumy/m_Number;

do {

Max--;

distf=dists=10.0E10; //循环获取圆心离每个边的距离,获得最小和次小距离,并且保存各个垂足

for(int i=0; i

dist=CalRealDist(O.x,O.y,m_PointList[i].x,m_PointList[i].y,m_PointList[i+1].x,m_PointList[i+1].y,tempPt);

if(dist

dists=distf; distf=dist;

B.x=A.x; B.y=A.y;

A.x=tempPt.x; A.y=tempPt.y;

}

if(distdistf) {

dists=dist;

B.x=tempPt.x; B.y=tempPt.y;

}

}

C.x=A.x+distf/(distf+dists)*(B.x-A.x);

C.y=A.y+distf/(distf+dists)*(B.y-A.y);

do { //计算新的内切园圆心坐标

distfn=distsn=10.0E10;

if(C.x==O.x&&C.y==O.y) //判断圆心是否和AB 共线

{

C.x=A.x;

C.y=A.y;

}

O1.x=O.x+a*(O.x-C.x)/sqrt((O.x-C.x)*(O.x-C.x)+(O.y-C.y)*(O.y-C.y));

O1.y=O.y+a*(O.y-C.y)/sqrt((O.x-C.x)*(O.x-C.x)+(O.y-C.y)*(O.y-C.y)); //重新计算内切圆的最小半径

for (i=0; i

dist=CalRealDist(O1.x,O1.y,m_PointList[i].x,m_PointList[i].y, m_PointList[i+1].x, m_PointList[i+1].y, tempPt);

if(dist

distfn=dist; //保存最小

}

}

if(distfn

} while(distfn0.00001); //这里判断说明了

//将新计算的O1点赋值给O 点

O.x=O1.x; O.y=O1.y;

} while(a>0.00001&&Max>0);

m_center.x=O1.x;

m_center.y=O1.y;

m_radius=distfn;

return TRUE;

}

BOOL CPline::FindIncircle(double a)//这是一个多段线类的成员函数,把其中的点设成参数就可以满足别的需求了

{

int Max=500;//设置最大循环次数

double sumx,sumy;

sumx=sumy=0; //其中,A 点是距离最近的点,B 点是次近的点

PointStruct A, B,C,O,O1,tempPt; //A,B,分别为最小,和次小距离的两个垂足,o 为设定初始计算圆心

float distf,dists,dist;

float distfn,distsn;// a 为步长因子

m_PointList[m_Number]=m_PointList[0]; //

for(int i=0;i

sumx+=m_PointList[i].x;

sumy+=m_PointList[i].y;

}

O.x=sumx/m_Number;

O.y=sumy/m_Number;

do {

Max--;

distf=dists=10.0E10; //循环获取圆心离每个边的距离,获得最小和次小距离,并且保存各个垂足

for(int i=0; i

dist=CalRealDist(O.x,O.y,m_PointList[i].x,m_PointList[i].y,m_PointList[i+1].x,m_PointList[i+1].y,tempPt);

if(dist

dists=distf; distf=dist;

B.x=A.x; B.y=A.y;

A.x=tempPt.x; A.y=tempPt.y;

}

if(distdistf) {

dists=dist;

B.x=tempPt.x; B.y=tempPt.y;

}

}

C.x=A.x+distf/(distf+dists)*(B.x-A.x);

C.y=A.y+distf/(distf+dists)*(B.y-A.y);

do { //计算新的内切园圆心坐标

distfn=distsn=10.0E10;

if(C.x==O.x&&C.y==O.y) //判断圆心是否和AB 共线

{

C.x=A.x;

C.y=A.y;

}

O1.x=O.x+a*(O.x-C.x)/sqrt((O.x-C.x)*(O.x-C.x)+(O.y-C.y)*(O.y-C.y));

O1.y=O.y+a*(O.y-C.y)/sqrt((O.x-C.x)*(O.x-C.x)+(O.y-C.y)*(O.y-C.y)); //重新计算内切圆的最小半径

for (i=0; i

dist=CalRealDist(O1.x,O1.y,m_PointList[i].x,m_PointList[i].y, m_PointList[i+1].x, m_PointList[i+1].y, tempPt);

if(dist

distfn=dist; //保存最小

}

}

if(distfn

} while(distfn0.00001); //这里判断说明了

//将新计算的O1点赋值给O 点

O.x=O1.x; O.y=O1.y;

} while(a>0.00001&&Max>0);

m_center.x=O1.x;

m_center.y=O1.y;

m_radius=distfn;

return TRUE;

}


相关内容

  • 神奇的多边形内切圆与外接圆
  • 神奇的多边形内切圆与外接圆 作者:王森淼 组长:王临沨 多边形与其外接圆.内切圆都有着神奇的关系.今天,我们就来深入研究一下. 内切圆: 在数学中,若一个二维平面上的多边形的每条边都能与多边形内部的一个圆形相切,该圆就是多边形的内切圆,这时称这个多边形为圆外切多边形.圆亦是多边形内部最大的圆形.内切 ...

  • 三角形的内切圆
  • 三角形的内切圆 教学目标: 1. 使学生了解画三角形的内切圆的方法,了解三角形和多边形的内切圆.圆的外切三角形和圆的外切多边形.三角形内心的概念: 2. 应用类比的数学思想方法研究内切圆,逐步培养学生的研究问题能力: 3.激发学生动手.动脑主动参与课堂教学活动. 教学重点.难点: 三角形内切圆的作法 ...

  • 圆与三角形
  • 初三数学 温故班 第一期 第五天 圆与三角形 一.知识回顾 1.确定圆的条件有哪些? (1).圆心与半径:(2)不在同一直线上的三点 2.什么是角平分线?角平分线有哪些性质? (角平线上的点到这个角的两边的距离相等.) 3.左图中△ABC与⊙O有什么关系? (△ABC是⊙O的内接三角形:⊙O是△AB ...

  • 正多边形和圆1
  • 三和中学新授课教学案初 三 年级 数学 学科,编制:倪娟 预计上课时间第 周. 施教日期:200 年 共几课时 教学 24.3 正多边形和圆 内容 第几课时 学 习 目 标 重 点 难 点 教学 资源 审核: 月 日 第 1 课 型 1 周星期 新授1.了解正多边形的概念.正多边形和圆的关系: 2. ...

  • 圆教案(全)-免费
  • 圆 1.平分弦(不是直径)的直径垂直于弦,•并且平分弦所对的两条弧及其运用. 2.在同圆或等圆中,相等的圆心角所对的弧相等,•所对的弦也相等及其运用. 3.在同圆或等圆中,同弧或等弧所对的圆周角相等,•都等于这条弧所对的圆心角的一半及其运用. 4.半圆(或直径)所对的圆周角是直角,90•°的圆周角所 ...

  • [圆]知识点归纳
  • 义务教育课程标准实验教科书九年级上册 第24章<圆>知识点归纳 一. 圆的定义 1.在一个平面内,线段OA绕它固定的一个端点O旋转一周,另一个端点A所形成的图形叫圆.这个固定的端点O叫做圆心,线段OA叫做半径.以O点为圆心的圆记作⊙O,读作圆O. 2.圆是在一个平面内,所有到一个定点的距 ...

  • 初三数学知识点整理
  • 初三数学知识点整理 一. <二次函数> 1.二次函数的定义:形如y=ax2+bx+c (a ≠0) 形式叫二次函数. 2.解析式的形式:①一般式:y=ax2+bx+c (a ≠0) ②顶点式:y=a(x-h)2+k 3.图像性质: [顶点的横坐标即图像的对称轴,纵坐标即函数的极值] 4 ...

  • 2011中考圆专题复习全套(1)
  • 圆的基本性质 点与圆的位置关系 1. 决定圆的大小的是圆_____;决定圆位置的是_____. 2. 在Rt△ABC中∠C=90O,AC=4,OC=3,E.F分别为AO.AC的中点,以O为圆心.OC为半径作圆,点E在⊙O的圆_____,点F在⊙O的圆_____. 3. 如图;AB.CD是⊙O的两条直 ...

  • 九年级数学圆的测试题及答案(两套)2016
  • 圆 圆的有关概念与性质 1. 圆上各点到圆心的距离都等于 半径 . 2. 圆是 轴 对称图形,任何一条直径所在的直线都是它的 对称轴 :圆又是 中心 对称图形, 圆心 是它的对称中心. 3. 垂直于弦的直径平分 这条弦 ,并且平分 弦所对的弧 :平分弦(不是直径)的 直径 垂直于弦,并且平分 弦所对 ...