GIS开发:画曲线(贝塞尔)

在地图开发中,有时会用到画曲线,一般的地图API中,都会提供画曲线的方法,或者提供相应的图例。

下边简单的介绍一下,如何在地图上根据点的位置,画一条贝塞尔曲线。

贝塞尔曲线(Bézier curve),又称贝兹曲线或贝济埃曲线,是应用于二维图形应用程序的数学曲线。一般的矢量图形软件通过它来精确画出曲线,贝兹曲线由线段与节点组成,节点是可拖动的支点,线段像可伸缩的皮筋,我们在绘图工具上看到的钢笔工具就是来做这种矢量曲线的。贝塞尔曲线是计算机图形学中相当重要的参数曲线,在一些比较成熟的位图软件中也有贝塞尔曲线工具,如PhotoShop等。–来自百科

在地图上画的时候,小范围画的时候,经纬度坐标或者平面坐标系的方式差不多,大范围的时候,尽量要将经纬度转换成长度单位(例如米制)来进行画,因为算法的时候,计算的都是根据相应的距离。

贝塞尔的算法,在github上可以搜索到很多,根据自己的开发语言选择其中的一类即可。
在这里插入图片描述
简单的js示例:https://github.com/Aaaaaaaty/bezierMaker.js

在画曲线的时候,最少需要3个点才能进行勾画,传入3个以上点的坐标,即可生成曲线效果。
在这里插入图片描述
本身这个算法开源的就很多,在地图上画的时候,只是涉及到经纬度,是弧度制的单位,画起来会有相应的顾虑,理解其中的原理,直接传入距离类型的坐标,就能画出以上这种曲线的效果。

注:在三维的球面地图上画曲线的时候,要把高度的值也作为一个因素传入进去,要不然画的效果达不到。

更多文章请关注公众号查看:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Matlab中,可以使用 `bend` 函数创建贝塞尔曲线,并且可以使用 `plot` 函数将其绘制出来。具体步骤如下: 1. 定义控制点的坐标,存储在一个大小为 $n \times 2$ 的矩阵中,例如: ```matlab P = [0 0; 1 3; 3 4; 5 2]; ``` 2. 定义取样点的位置,存储在一个大小为 $m \times 1$ 的向量中,例如: ```matlab t = linspace(0, 1, 100); ``` 其中,`linspace` 函数用于生成一个从 0 到 1 的等差数列,共有 100 个元素。 3. 使用 `bend` 函数计算贝塞尔曲线的坐标,例如: ```matlab B = bend(P, t); ``` 其中,`B` 是一个大小为 $m \times 2$ 的矩阵,表示贝塞尔曲线的坐标。 4. 使用 `plot` 函数将贝塞尔曲线绘制出来,例如: ```matlab plot(B(:,1), B(:,2), '-o', P(:,1), P(:,2), 'r*'); ``` 其中,`plot` 函数的第一个参数是贝塞尔曲线的横坐标,第二个参数是贝塞尔曲线的纵坐标,第三个参数是绘制样式,第四个参数是控制点的横坐标,第五个参数是控制点的纵坐标,第六个参数是控制点的绘制样式。 综合以上步骤,可以得到以下代码: ```matlab P = [0 0; 1 3; 3 4; 5 2]; t = linspace(0, 1, 100); B = bend(P, t); plot(B(:,1), B(:,2), '-o', P(:,1), P(:,2), 'r*'); ``` 执行该代码可以得到以下结果: ![贝塞尔曲线](https://img-blog.csdn.net/2018050115392019?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Zsb3JhZG93bmxvYWQ=//font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/75)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值