基本上,我想要做的是瞭解如何計算值一起這裏代表了Photoshop的曲線框「曲線」背後的數學:如何重建的Photoshop曲線
所以,給定N個點,其中x在0和1之間,y在0和1之間 - 我們將創建一條穿過所有這些點的曲線。鑑於此曲線,我希望能夠計算任何給定X的曲線的所有值。
換句話說,我想修改顏色的值,就像曲線框一樣,但以編程方式。
我讀過這些是「catmull-rom splines」 - 但我看到的是一個依賴於參數T的函數 - 我希望能夠查找x的值。我想如果可能的話
基本上,我想要做的是瞭解如何計算值一起這裏代表了Photoshop的曲線框「曲線」背後的數學:如何重建的Photoshop曲線
所以,給定N個點,其中x在0和1之間,y在0和1之間 - 我們將創建一條穿過所有這些點的曲線。鑑於此曲線,我希望能夠計算任何給定X的曲線的所有值。
換句話說,我想修改顏色的值,就像曲線框一樣,但以編程方式。
我讀過這些是「catmull-rom splines」 - 但我看到的是一個依賴於參數T的函數 - 我希望能夠查找x的值。我想如果可能的話
一個的Catmull-Rom樣條被使用,因爲它是一種花的代表的曲線,可以在其中添加控制點和細化曲線本身(這是你在Photoshop中做什麼,當你點擊添加新點),具有讓曲線通過您指定的每個控制點的特殊性。
在任何情況下,你只需要一個(在你有0..255或任何色彩空間漂浮在0..1或INT)所值的函數會產生一個又一個。
float fun(float x) {
y = /* something */
return y;
}
這當然可以用任何一種功能來完成。最基本的一個是默認的一個是身份的功能
float fun(float x) {
y = x;
return y;
}
任何其他功能可與曲線來計算,這將是確定,但更復雜的發展,我建議你從喜歡簡單的例子開始貝塞爾曲線。在任何情況下t
參數的使用,因爲這些參數曲線,你需要了解一些曲線的數學背景的挖掘到開發之前,先看看here。
我不熟悉的CR爲此在C,但如果它像貝濟耶,比T參數從0在彎道路段的一個端點在另一端點變化到一個。這就是你如何「順着」曲線。所以,你不能只是插上你在一個x值,你可以品嚐長一些任意的間隔,也可以使用某種目標搜索算法接近給定的x值到任何精密量你認爲有必要。
我要說更喜歡花鍵比貝塞爾,作爲線穿過控制點。 – ysap 2010-12-05 17:41:18
下面是出現實現三次樣條曲線Photoshop使用一個VBScript的鏈接。
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=68577&lngWId=-1
Photoshop使用的interpolating cubic spline的曲線,在a separate Math StackExchange thread的探索。
我覺得Photoshop使用自然三次樣條 - http://blog.mackerron.com/2011/01/01/javascript-cubic-splines/ – 2012-11-21 01:26:16
什麼多項式? – 2018-02-07 13:19:57
對不起,我不知道樣條和多項式之間的關係。樣條線可能會更好。 – 2018-02-08 06:55:48