私は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;
私の理論が、私は修正するための最良の方法です何がわからないこの分離は1行が終了する点は同じポイントは、次の始まる場所であるという事実によるものであるということですこの。私はこれでかなり新しいので、誰かがこれらのかすかな分裂を消滅させるために何か試して真の解決策を持っているかどうか尋ねる前に、ハッキングしたくない。
EDIT:
ここでは、私は、セグメントを生成するために使用しているコードです。 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);
}
奇数もう少しコードを教えてもらえますか? –
間違いなく。しかし、たくさんあります。あなたはもっと具体的になりますか? –
すべてのライン設定などで実際にベジェを描画するものを切り取ります。コンパイルするのが望ましいでしょう。 –