2011-09-14 61 views
0

一些像Manga Studio这样的绘画程序包括笔刷,它们逐渐缩小到笔画末端的一个点。关于如何实现这一点,我有一些想法,但我认为这些想法对我来说似乎有问题/效率低下......我无法通过谷歌找到关于此任务的任何信息,所以我想我会在这里问。创建锥形笔划

有没有人知道任何算法在AWT中创建锥形笔画?

我需要弄清楚的是,如何将我已经从鼠标事件(例如(x50,y50) - (x37,y20) - (x47,y10))获得的鼠标坐标转换为Path2D.curveTo()或者这种性质的东西。你如何做数学来减少中风? (我不认为有没有什么办法可以做到这一点,没有相当数量的数学......但我想我可能是错的。)

谢谢!

编辑:请注意,允许用户使用此笔画徒手绘制图像,这意味着笔画的边必须弯曲以匹配用户的笔。

回答

1

Polygon是一个不错的选择。由于实现了Shape接口,因此可以使用createStrokedShape(),如here所示。可以应用AffineTransform来旋转,平移或缩放对象,如herehere所示。这些例子可以帮助你判断表现。

附录:虽然我还没有尝试过,但Arc2D可能是一个合理的替代方案来旋转Polygon。一个相关的QuickDraw primitive曾经给予古老的MacDraw一个独特的shape for arrowheads

+0

谢谢。不幸的是,这对我的情况并没有什么帮助。这是一个允许用户徒手绘制图像的界面,因此笔划的边必须弯曲,这使任何直接使用Polygon的选项都成为非选项。我想我可以使用带多余点的多边形作为基础,然后复制每个点并根据下一个徒手绘制点的位置旋转它,然后将其添加到Path2D中,但这会让我回到起点,看起来像是什么非常复杂,可能效率低下的解决方案 –

+0

您可以使用任何['形状'](http://download.oracle.com/javase/7/docs/api/java/awt/Shape.html),或许是路径或曲线之一。 – trashgod

+0

这不是真正的“哪些对象”,这是问题...我已经使用各种形状对象,并使用Path2D实现了画笔。但是这并没有回答如何有效地计算/绘制减少中风所涉及的曲线的问题。我需要的是Path2D.curveTo(x1,y1,x2,y2) - 我如何将鼠标坐标转换为curveTo方法中的参数?这可能不是正确的方法 - 它可能是cubeTo或quadTo,但这是数学,这是我的挑战。感谢您的建议,寿! :D –