输入n(n>1)个不同的点坐标, 要求找到一个最小的圆,使得该圆包含该n个点。

shanshan1983 2005-06-16 12:24:53
输入n(n>1)个不同的点坐标(x, y) (x,y ∈ R)。现在我们希望找到一个最小的圆,使得该圆包含该n个点。
请提供程序代码,以及思路文档。
1、证明:至少有两个点在该最小的圆上。
2、假设我们记在该最小的圆上两个点为A、B。
则任取n点中的两个点M、N,必然满足以下条件之一:
1)M、N中有一个点在AB构成的线段上。
2)M、N在AB所在的直线的同侧。
3)N、N在AB所在的直线的两侧,且
∠AMB + ∠ANB >= π
3、试编写一个函数,实现本题要求的最终功能。即:
找到包含n个点的最小圆。求出该圆的圆心(x, y),以及半径r。
4、试分析你写的函数的时间复杂度。
...全文
457 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
shanshan1983 2005-06-30
  • 打赏
  • 举报
回复
谢谢各位了,尤其是happy__888([顾问团]寻开心)
有空我要仔细研读一下的。
sodangerous 2005-06-30
  • 打赏
  • 举报
回复
首先想到这个问题是一个优化问题,有可能找不到全局最优,虽然理论上这个阿全局最优是存在的,先吧优化目标和决策变量列出来,使用优化算法吧!如遗传算法、模拟退火算法、剃度法、蚂蚁算法等
创造奇迹9999 2005-06-30
  • 打赏
  • 举报
回复
UP!
寻开心 2005-06-28
  • 打赏
  • 举报
回复
关于这个问题的论文可以在这里下载
http://valis.cs.uiuc.edu/~sariel/papers/03/min_disk/min_disk.pdf
寻开心 2005-06-28
  • 打赏
  • 举报
回复
这个证明很容易
1 否则就不是最小圆
2 ambn是四点共圆时刻 amb+bna角度都最小

至于解法,是计算几何当中的基本算法,这个算法并不简单,叫做最小圆问题
英文是 Smallest Enclosing Disk
使用这个主题你可以在google上搜索到很多答案
最佳答案难以计算,逼近算法容易构造
这里是一个c的源码
http://www.csl.sony.co.jp/person/nielsen/PT/seb/sebdisk.html

shanshan1983 2005-06-28
  • 打赏
  • 举报
回复
是啊,也看到有求凸包的方法来解决此问题,但不知道该具体怎么用算法来实现?
CCL 2005-06-24
  • 打赏
  • 举报
回复
在三维空间中建立一个累加器,遍历每个点,找到与其最远的点,将所有在以这两点为半径的球内的累加器加一。最后找到累加器最大值所在位置,很容易建立一个球。

这个方法比较笨,但应该能有效应付需要;不过对付作业就没什么用了……
zzwu 2005-06-24
  • 打赏
  • 举报
回复
我有一本有关<计算几何和并行计算〉的论文集(英文),其中有许多篇文章介绍了这一问题,但没有
一篇文章的解法是深入介绍算法过程的。也就是说,所讲的过程每一步都不容易理解。
CCL 2005-06-24
  • 打赏
  • 举报
回复
看错题了……只要二维,那么上面的算法可以很大的简化……
shanshan1983 2005-06-23
  • 打赏
  • 举报
回复
liangbch(宝宝)的这种做法不能保证至少有两个点在这个最小圆上, 只能保证一个。
shanshan1983 2005-06-20
  • 打赏
  • 举报
回复
wxt(D.K) 讲得不太对哦
liangbch 2005-06-20
  • 打赏
  • 举报
回复
给一个近似的算法:
 找出x坐标的最小值和最大值,计算其均值x0, 找出y坐标的最小值和最大值,计算其均值y0,
以(x0,y0)为中心,计算这点与所有点的距离,取其最大者r, 则以(x0,y0)为圆心,以r为半径的圆食为近似解。
galois_godel 2005-06-18
  • 打赏
  • 举报
回复
周培德那本书介绍了n种做法
syy64 2005-06-18
  • 打赏
  • 举报
回复
应该是每两两点求距离,其中距离最大者就是最小圆的直径
syy64 2005-06-18
  • 打赏
  • 举报
回复
应该是每两两点求距离,其中距离最大者就是最小圆的半径。
wtzyb4446 2005-06-17
  • 打赏
  • 举报
回复
to zzwu(未名) wxt(D.K) :
你们说得没错。
受教!
wtzyb4446 2005-06-16
  • 打赏
  • 举报
回复
其实就是找n个点中的最大距离,以距离最大的两点作为直径。
zzwu 2005-06-16
  • 打赏
  • 举报
回复
请参看:

http://search.csdn.net/Expert/topic/2444/2444239.xml?temp=.1251642
mathe 2005-06-16
  • 打赏
  • 举报
回复
看看就像作业
wxt 2005-06-16
  • 打赏
  • 举报
回复
我的方法:
先找出距离最远的两点,接着用这两个点和每个点构造一个三角形,找出边长最长的三角形。如果这个点和其他两点构成的角度大于90度,那么"最大两点距离作为直径"才是对的。否则该三角形的同心圆才是正解。
加载更多回复(2)

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧