2012-06-12 48 views
2

我正在尋找一種方式來呈現一串連線,作爲一個不錯的連續曲線在postscript中。呈現的曲線通過所有點是很重要的。如何爲postscripts curveto運算符生成控制點?

curveto似乎是繪製曲線的唯一可用方法,但該功能需要更加緩慢的控制點,這是我沒有的。

那麼,有沒有辦法計算我的積分的控制點,所以curveto可以使用?最好在後記中。

作爲參考,我以前在.NET中使用了GraphicsPath.addCurve(float[]),它在渲染它們之前在內部轉換爲三次Bézier控制點。我正在尋找類似於postscript的東西。

(我能插使用樣條函數的積分,然後用很多很多的各條線的渲染它,它看起來不錯,但不是一個真正的偉大的解決方案)如果插值使用點

回答

1

我通過使用代碼示例here解決了這個問題(「通過一組2D點與基元貝塞爾繪製平滑的曲線」)。

2

一個樣條函數,那麼你有一些曲線段的三次方程。並且可以將它們轉化爲伯恩斯坦多項式的基礎來找到對應的貝塞爾曲線的控制點。 (1-t)^ 2 + P2 * 3 *(3-t)* 2 *(1-t)^ 3 + P1 * 3 * t *(1-t)^ 2 *使一些代數 - 擴展括號,等同於t的相同冪的係數,通過三次方程係數A,B,C表示P(i) ,d

p0 = D 
p1 = D + C/3 
p2 = D + C * 2/3 + B/3 
p3 = D + C + B + A