2

我有一组鼠标点、一个笔画宽度和一个柔软度。我可以画出柔和的圆圈和柔和的线条。我应该使用哪种算法来绘制我的点数组?我希望交叉线看起来像端点一样漂亮。

4

4 回答 4

3

我肯定会为此目的选择贝塞尔曲线,特别是我将实现分段三次贝塞尔曲线——它确实很容易实现和掌握,并且被 3D Studio max 和 Photoshop 广泛使用。

这是一个很好的来源: http ://local.wasp.uwa.edu.au/~pbourke/surfaces_curves/bezier/cubicbezier.html

假设您在点之间有一个顺序,为了设置四个控制点,您应该执行以下操作:

我定义点 P[i] 和点 P[i+1] 之间的切线

  • T1 = (P[i+1] - P[i-1])
  • T2 = (P[i+2] - P[i])

为了在两点之间创建分段,我执行以下操作:

  • 控制点 Q1:P[i]
  • 控制点 Q2:沿 Q1 切线的点 => Q1 + 0.3T1
  • 控制点 Q3:沿 Q4 切线的点 => Q4 - 0.3T2
  • 控制点 Q4:P[i+1]

我选择 0.3T 的原因是随意的,以便给它足够的“强度”但又不过分,您可以使用更精细的方法来处理加速(C2 连续性)。

享受

于 2008-09-17T19:25:04.550 回答
2

从 Gooch & Gooch 的Non-Photorealistic Rendering开始,您可能会发现 Pham 的工作很有用 - 请参阅PDF解释算法。

Tateosian有一篇很好的概述文章,它用漂亮的图片详细解释了其他技术。单独绘制贝塞尔曲线不会产生您想要的效果(取决于您想要获得的效果)。但是,我肯定会从 Paul 的作品开始,看看用你的软笔画是否足够好。

请注意,这个领域有很多专利,叹息。

于 2009-01-13T03:47:49.440 回答
1

我想也许你正在寻找样条算法。

这是一个样条教程,您可能会发现它有帮助:

[ http://www.doc.ic.ac.uk/~dfg/AndysSplineTutorial/index.html]

大多数有关图形编程的书籍也涵盖了该主题。

干杯。

于 2008-09-17T19:09:58.063 回答
1

我想通了 - 使用一个非常柔和的渐变圆,反复绘制以制作笔触,使用乘法混合。

于 2008-09-23T19:57:44.863 回答