画圆滑的曲线连接地图上面的点

问题 :

最近碰到一个问题,就是在地图(baidu或google)上面画等值线,但是这些地图的API不提供画曲线,只能画多边形。如天气预报中的台风强度图,如等高线。

但需求中能获得地图上面的点是有限的,而且不多。如7、8个点,需要用一条平滑的曲线来连接着几个点。

所以考虑自己来写个算法,通过给定的几个点,来计算出圆滑曲线上面的点。用折线来逼近曲线。

(最后实现效果图)

 

曲线模型:

首先要考虑的是生成曲线的模型(函数), 如一次取三个点,计算出经过这三点的圆。截取第一段,移到下一个点继续计算圆。理论应该可行,但曲线弧度不能控制,曲线与曲线之间过渡不能平滑。

在Photoshop里面,钢笔工具可以制作曲线,用的是贝塞尔曲线。这个模型可以实现任何的图形。

参考百度百科(http://baike.baidu.com/view/60154.htm )

 

 实现步骤:

输入:x1-y1,x2-y2,...,xn-yn.

输出:X1-Y1,X2-Y2,....Xm-Ym (m = K*n,K是倍数)

1)  先使用递归算法,将输入的点排序。用直线将相邻的两个点(最后一个点连接第一个点),最后得到的是一个多边形(没有任何两条线段相交)。

2) 计算出每个点左右连个辅助点。

3) 根据贝塞尔曲线的计算方法,算出中间过渡点。


参考连接:

Possible to position elements along a curve using javascript/jQuery? 

Bezier Sample

贝塞尔曲线 

 

posted @ 2012-10-10 14:52  See Me Fly  阅读(2067)  评论(1编辑  收藏  举报