WPF将点列连接成光滑曲线――贝塞尔曲线

本文介绍了如何使用WPF来将离散的点连接成光滑的贝塞尔曲线,适用于游戏场景编辑器中创建2D赛道场景。通过计算相邻点的中点,平移并作为控制点,确保曲线连接的平滑。最终实验结果显示曲线连接效果理想。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘自:http://www.th7.cn/Program/WPF/2011-07-02/8645.shtml

  背景

  最近在写一个游戏场景编辑器,虽然很水,但是还是遇到了不少问题。连接离散个点列成为光滑曲线就是一个问题。主要是为了通过关键点产生2D的赛道场景。总之马路不可能是直线相连的,当然需要曲线光滑相连。现在我就来解决这个问题。

  贝塞尔曲线

  贝塞尔曲线,又称贝兹曲线或贝济埃曲线,一般的矢量图形软件通过它来精确画出曲线,贝兹曲线由线段与节点组成,节点是可拖动的支点,线段像可伸缩的皮筋,我们在绘图工具上看到的钢笔工具就是来做这种矢量曲线的。当然在一些比较成熟的位图软件中也有贝塞尔曲线工具,如PhotoShop等。在Flash4中还没有完整的曲线工具,而在Flash5里面已经提供出贝塞尔曲线工具。

  这里是百度里面的介绍。直接搬过来了。

  问题

  

image

 

  如图,这些绿色的点我们希望用光滑的曲线连接它们。

  看看WPF给我们提供的函数:

  

image
image

 

  来自MSDN

  我们发现point3和point4是我们需要的,这两个点我们直接可以从点列中取得,但是point1和point2如何获取呢?控制点到底是个什么东西。当然我试了很多次失败了很多次~~

  巧妙的解决方案

  大致思路就是 先算出相邻原始点的中点,在把相邻中点连成的线段平移到对应的原始点,以平移后的中点作为控制点,相邻原始点为起始点画贝塞尔曲线,这样就保证了连接处的光滑。而贝塞尔曲线本身是光滑的,所以就把这些原始点用光滑曲线连起来了。

  (http://liyiwen.javaeye.com/blog/705489)

  

image

 

  实验结果

  

image

 

  看起来连接的还是比较光滑的。

  相关代码

Path path;
        public void UpdateRoad()
        {
            MapCanvas.Children.Remove(path);
            if (ScenePoint.roadPoint.Count > 0)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值