使用一組點畫出平滑的曲線

2021-07-30 16:59:08 字數 830 閱讀 4852

今天在專案中需要人臉上的點來勾勒出人臉的輪廓,我的想法是將要畫的點存入乙個陣列,使用了uibezierpath來連線每乙個點。但是這樣畫出來的圖是折線,顯得過於生硬。查了若干資料,後來終於在stackoverflow上找到了乙個很好的解決辦法。

這個做法的原理其實是在每兩個點之間加入一些點,來使得兩個點可以平滑的過度。這其實就是centripetal catmull–rom spline的思想。

看效果:

於是便照葫蘆畫瓢,寫出了我的**

#define point(_index_) [(nsvalue *)[points objectatindex:_index_] cgpointvalue]

- (void)smoothedpathwithpoints:(nsarray *) pointsarray andgranularity:(nsinteger)granularity

// now add

p2 [smoothedpath addlinetopoint:p2];

}// finish by

adding the last point

[smoothedpath addlinetopoint:point(points.count - 1)];

cgcontextaddpath(context, smoothedpath.cgpath);

cgcontextdrawpath(context, kcgpathstroke);

}

canvas高階 如何畫出平滑的曲線

嗯,相信這對canvas使用較熟的童鞋來說僅僅只是幾十行 就可以搞掂的事情,以下demo就是乙個再也簡單不過的例子了 它的實現邏輯也很簡單 我們在canvas畫布上主要監聽了三個事件 mousedown mouseup和mousemove,同時我們也建立了乙個isdown變數 當使用者按下滑鼠 mo...

根據一組點擬合曲線(需要opencv庫)

matlab中跟據點擬合方程灰常容易,直接使用polyfit函式就行了。c 貌似沒有直接擬合曲線的函式,在下不才,就用c 結合opencv的庫函式寫了個擬合曲線的函式。include include include using namespace std 函式功能 根據vec中儲存的點的座標擬合曲線...

語言的基礎是一組記號和一組規則

是用於編寫電腦程式的語言。語言的基礎是一組記號和一組規則。根據規則由記號構成的記號串的總體就是語言。在程式語言中,這些記號串就是程式。程式語言包含三個方面,即語法 語義和語用。語法表示程式的結構或形式,亦即表示構成程式的各個記號之間的組合規則,但不涉及這些記號的特定含義,也不涉及使用者。語義表示程式...