我有一组鼠标点、一个笔画宽度和一个柔软度。我可以画出柔和的圆圈和柔和的线条。我应该使用哪种算法来绘制我的点数组?我希望交叉线看起来像端点一样漂亮。
4 回答
我肯定会为此目的选择贝塞尔曲线,特别是我将实现分段三次贝塞尔曲线——它确实很容易实现和掌握,并且被 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 连续性)。
享受
从 Gooch & Gooch 的Non-Photorealistic Rendering开始,您可能会发现 Pham 的工作很有用 - 请参阅PDF解释算法。
Tateosian有一篇很好的概述文章,它用漂亮的图片详细解释了其他技术。单独绘制贝塞尔曲线不会产生您想要的效果(取决于您想要获得的效果)。但是,我肯定会从 Paul 的作品开始,看看用你的软笔画是否足够好。
请注意,这个领域有很多专利,叹息。
我想也许你正在寻找样条算法。
这是一个样条教程,您可能会发现它有帮助:
[ http://www.doc.ic.ac.uk/~dfg/AndysSplineTutorial/index.html]
大多数有关图形编程的书籍也涵盖了该主题。
干杯。
我想通了 - 使用一个非常柔和的渐变圆,反复绘制以制作笔触,使用乘法混合。