【发布时间】:2016-02-04 03:10:17
【问题描述】:
我正在使用 DrawCurve 和 DrawClosedCurve 在我的 PictureBox 上绘制曲线,如下所示:
if(isClosed) {
g.DrawClosedCurve(
new Pen(c, lineSize),
points,
tension,
FillMode.Alternate
);
} else {
g.DrawCurve(
new Pen(c, lineSize),
points,
tension
);
}
问题是,我希望开放曲线看起来像闭合曲线,因为现在,如果我对两条曲线使用相同的张力 (0.8f),它们看起来像这样:
我真正想要的是它看起来像这样:
我怎样才能达到这个结果?我需要使用 DrawBezier(或 DrawBezier)而不是 DrawCurve 吗?如果是,我如何计算要使用的控制点?此外,必须使用张力,以便用户可以绘制不同类型的曲线。
===== 编辑 =====
我想我没能正确解释我想要什么,所以我试着想另一个例子......
有这组点:
使用 1.2f 作为张力,DrawCurve 绘制如下:
还有像这样的 DrawClosedCurve:
现在我意识到,我真的不希望像闭合曲线那样绘制开放曲线,但我真正想要修复的是靠近第一个点和最后一个点的曲线。
曲线从逆时针运动开始,然后它们在到下一个点的中途切换到顺时针运动。最后一个点也是如此,但它从倒数第二个点顺时针开始,到下一个点的中途切换到逆时针(这也可以在第一个示例中看到)。因此,在本例中,我希望曲线以顺时针运动开始,而不是在中途切换到下一个点,并以顺时针运动结束。
但现在我不认为有一个简单的解决方案,因为我希望 DrawCurve 在除第一个和最后一个点之外的所有点上的正常行为......
我相信这仍然可以通过使用 DrawBezier 来实现,但我不知道如何计算考虑到张力的控制点...
【问题讨论】: