给一个计算多边形中心点的算法好吗?(100分)

  • 主题发起人 ZhangFei
  • 开始时间
Z

ZhangFei

Unregistered / Unconfirmed
GUEST, unregistred user!
要求中心点一定要在多边形内。

拒绝扫描线的方法!因为本算法要求速度快。
 
我来听以后各位的数学公式
 
求各顶点的坐标的平均值不行吗?
for i:=0 to Count-1 do
begin
x:= x + p.x;
y:= y + p.y;
end;
x:=x/Count;
y:=y/Count;
不过如果是非凸多边形的话,可能不在多边形内。
 
对不起,就是因为凸边形不大好对付,
静候数学功底扎实的各位的佳音!
 
多边形的中心没听过. 听过的是多边形的重心. 重心在凹多边形的时候可不一定在多
边形的内部.

你要的那个中心首先要自己给他下一个明确的定义, 然后推导它的算法吧. 另外不知
道这个落在多边形内的心的意义是什么.
 
是不是想 Floodfill ?
 
我是想作多边形的注记,如一个街区的名称:天安门广场。要求注记点一定要
在多边形内部,而这个注记点还要求要符合大家通常习惯,要在多边形内比较
中心的地方(就叫作“心理重心”吧!)

现在我想出来的此注记点的定义是“多边形最大内接或内切圆圆心”。
 
>此注记点的定义是“多边形最大内接或内切圆圆心”。
也不能保证只有一个!!
 
应该定义为多边形内最大矩形才对吧! 没有好办法, 水平线扫描是最有效的办法了.

水平线扫描可以给一个固定的y向步长, 把那些能够容纳你的标签矩形的点都传放到一
个数组中, 扫描后求数组中间的那点作为你的中心.
 
>拒绝扫描线的方法!因为本算法要求速度快。
提示:
您只需要扫描经过多边形顶点的水平线条,多乎哉? :)
 
>拒绝扫描线的方法!因为本算法要求速度快。
提示:
您只需要把经过多边形顶点的水平线按照高度顺序扫描,多乎哉? :)
 
这种扫描算法只是应该是一次性的, 也就是说扫描后算出的心点应该存到数据结构中
去, 以后显示, 缩放时就不需要再算了, 所以开销不会很大. 但是要检测鼠标是否在
多边形中的话, 每一次鼠标事件都需要计算.
 
多人接受答案了。
 
顶部