我在WPF中繪製了一些貝塞爾曲線,大部分它都在工作,但我在每個片段之間都會發現一些微弱的分離。正如你所看到的,他們甚至出現在連續的部分,所以我不認爲這個問題是由於部分數量不足。 (此圖片是在4倍的放大倍率。)WPF中的貝塞爾曲線
我使用System.Windows.Shapes.Line對象的集合來畫他們。他們被實例化的代碼如下所示:
Shapes.Line Line = new Shapes.Line();
Line.Stroke = Brush;
Line.HorizontalAlignment = Windows.HorizontalAlignment.Left;
Line.VerticalAlignment = Windows.VerticalAlignment.Center;
Line.StrokeThickness = 10;
我的理論是,這種分離是由於這樣的事實,其中一個行結束點是同一個點的下一開始的地方,但我不能確定什麼是解決的最好辦法這個。我很新,所以我不想在黑客入侵之前詢問是否有人嘗試過真正的解決方案,讓這些模糊分離消失。
編輯:
這裏是我使用的生成段的代碼。 ILine接口是我創建的東西,但它的點值只是在程序中稍後轉換爲System.Windows.Shapes.Line各自的值。
public static void FormBezier(List<ILine> Lines, Point[] pt)
{
if (Lines.Count == 0) return;
double t, dt, x0, y0, x1, y1;
t = 0.0;
dt = 1.0/Lines.Count;
x1 = X(t, new double[] { pt[0].X, pt[1].X, pt[2].X, pt[3].X });
y1 = X(t, new double[] { pt[0].Y, pt[1].Y, pt[2].Y, pt[3].Y });
t += dt;
for(int index = 1; index < Lines.Count - 1; index++)
{
x0 = x1;
y0 = y1;
x1 = X(t, new double[] { pt[0].X, pt[1].X, pt[2].X, pt[3].X });
y1 = X(t, new double[] { pt[0].Y, pt[1].Y, pt[2].Y, pt[3].Y });
Lines[index].Start.X = x0;
Lines[index].End.X = x1;
Lines[index].Start.Y = y0;
Lines[index].End.Y = y1;
t += dt;
}
t = 1.0;
x0 = x1;
y0 = y1;
x1 = X(t, new double[] { pt[0].X, pt[1].X, pt[2].X, pt[3].X });
y1 = X(t, new double[] { pt[0].Y, pt[1].Y, pt[2].Y, pt[3].Y });
Lines[Lines.Count - 1].Start.X = x0;
Lines[Lines.Count - 1].End.X = x1;
Lines[Lines.Count - 1].Start.Y = y0;
Lines[Lines.Count - 1].End.Y = y1;
}
public static double X(double t, double[] x)
{
return
x[0] * Math.Pow((1 - t), 3) +
x[1] * 3 * t * Math.Pow((1 - t), 2) +
x[2] * 3 * Math.Pow(t, 2) * (1 - t) +
x[3] * Math.Pow(t, 3);
}
奇數。你能提供更多的代碼嗎? – 2012-03-30 18:44:18
當然。雖然有很多。你可以說得更詳細點嗎? – 2012-03-30 19:09:38
剪出一些實際上用所有線條設置繪製貝塞爾的東西等等,最好是編譯。 – 2012-03-30 19:17:27