在正式介绍该算法前先来说几句废话(其实有联系滴^-^)
三角关系的探索:

边和角的关系:
正弦定理:

盗图说明:

有:
证明:
余弦定理:
逐渐进入正题了
:
围绕三点做最小的圆,使得三个点全部在圆的内部或者圆上(最小圆覆盖)。这里存在两种情况:1. 三点全部都在圆上;2. 三个点如果有2个点在圆上,另一个点在圆的内部,那么那两个点一定是直径的两个端点。即:寻找对应三角形内最长的线段--->寻找最长的边--->由正弦定理可知,如果最大的角是钝角,即是第2种情况;如果最大的角是直角,那两个点一定是直径的两个端点,另一个点就在圆上,属于第一种情况;如果最大的角是锐角,那么3点均在圆上,没有边是直径,也属于第1种情况。
已知3个点求它们围成的三角形的面积时除了用叉积,还可以直接用行列式的方法:
对于:

假设圆心在三角形中(及时不设在三角形内部也能由向量的计算推出同样的效果。)那么,行列式计算的结果

即是3个叉积,加起来就是对应的整个多边形的面积,所以最后要除以2。写成代码:
find mincircle :三角形两条中垂线:

两式相减处理可以分别求出x和y,

设
那么就有

Y的求解类似上诉过程:

写成程序:
寻找多个点的最小覆盖圆可以用上面讨论过的两种情况迭代来写。
献上几道小菜:
hdu 3932 Groundhog Build Home
http://acm.hdu.edu.cn/showproblem.php?pid=3932
这种求解外心的方法在其他博客看见的,我没看懂它的原理(||-_-):
hdu 3007 Buried memory
http://acm.hdu.edu.cn/showproblem.php?pid=3007
如果没有点的随机化,那么结果不会出错,但是会影响效率:

zoj 1450 Minimal Circle
http://acm.zju.edu.cn/onlinejudge/?problemId=450
和上一题几乎一样,把点的个数上限改成105即可。
















