請教高手,這種曲線是什麼曲線,用什麼函數控制?
曲線兩段用圖示帶黃菱形塊的線控制斜率,且橙色圓塊與菱形塊距離大小也會對曲線形狀有影響。
這個曲線我若在matlab里實現,該往哪方向找資料?
如果能告知曲線名稱、函數類型、演算法思路,善莫大焉。
Cubic Bézier curve
通常是貝塞爾曲線,也叫三次樣條曲線,方程是y=ax^3+bx^2(1-x)+cx(1-x)^2+d(1-x)^3
看題主的附圖中該曲線有四個控制點,且曲線只經過首尾兩個控制點,應該是三次貝塞爾曲線,英文名即葉大答案中回答的Cubic Bézier curve。
在Bezier-Curve在線生成畫了一個,是不是跟題圖中的很類似呀?
正好最近在 Unity 里實現過一次 Bézier 曲線
我的思路是這樣的:
- 首先,獲取四個控制點即 P0,P1,P2,P3 的坐標
- 確定中間插值點的個數(把這些插值點從頭到尾連接起來就是我們需要的曲線,就是說把曲線看作一條條短直線的逼近)
- 求出這些插值點的坐標!然後連起來!曲線就粗來了!
第一步很簡單,第二步也不用多說(我選用了49個插值點即50段短折線使得曲線盡量平滑)
第三步,怎麼求這些插值點的坐標呢?
其實也很簡單(無恥地貼一張上課的PPT)
在代碼中是這樣的
具體使用方法就是(假設我們要算49個插值點):
第一個插值點的坐標,就是P(u) = P(1 / 50)
第四十九個插值點的坐標,就是P(u) = P(49 / 50)
然後把頭尾兩個控制點P0和P3,以及這些插值點按順序連接起來,曲線就粗線了!
希望能幫到你。
貝塞爾曲線或者三次b樣條。任何一本計算幾何的書都有
Bezier Curve 的一些知識可以在這裡找到:
Bézier curve - Wikipedia
Pomax/BezierInfo-2
可以直接用維基百科裡提到的數學公式來用多條線段逼近貝塞爾曲線。但是這種方法產生的貝塞爾曲線效果不是特別好。AGG 里實現了一種經過改良的 De Casteljau"s algorithm:
Adaptive Subdivision of Bezier Curves
Subdividing a Bézier Curve
這種演算法的一個 Demo:http://antigrain.com/demo/bezier_div.zip
貝塞爾曲線。
matlab里應該有現成的貝塞爾曲線的模塊
給補充一個學習資料吧
CS3621 Introduction to Computing with Geometry Course Notes
百度一下貝塞爾曲線,之前看到一個帖子講的很透徹,等我找到了再給你發URL吧2017-08-28更URLCSS3http://www.jianshu.com/p/d7e3302c36e4Androidhttp://www.jianshu.com/p/dbe59506985c
3次貝賽爾曲線
幫你開下傳送門
[怎麼理解貝賽爾曲線?]https://www.zhihu.com/question/29565629h5畫報api有
三次貝塞爾函數
有點像單曲線,好吧,因為其他的我都忘了
推薦閱讀:
※打了ACM以後對其他課程失去了興趣怎麼辦?
※編程可否做到自動化?
※如何看待現在文科理科化的一些工作?
※校強我弱,難以組出有實力的ACM隊伍。有哪些含金量高的、單人參加的演算法競賽可以作為ACM的替代品?
※AlphaGo 和人類棋手比起來誰消耗的資源更多?