2010-04-27 31 views
1

我想知道绘图应用程序如何在没有空白的情况下绘制鼠标关闭的整个过程。我的意思是,例如,如果该程序只在鼠标的X,Y坐标上绘制圆圈,那么如果鼠标过于虚拟,看起来就像是一堆小圆圈,而不是一条不错的连续线。如何在不经常在0.001秒前的鼠标位置和现在的鼠标位置之间绘制一条简短的直线的情况下完成此任务。 谢谢在绘图应用程序中不断绘图

+1

@everyone:OP询问* brush *工具是如何工作的,而不是* line *工具 – 2010-04-27 20:13:22

+0

@BlueRaja,谢谢,我也误解了:) – 2010-04-27 20:15:00

+0

@BlueRaja:是什么让你觉得他/她/画笔工具? – MusiGenesis 2010-04-27 20:23:10

回答

3

不能而不不断吸取当前鼠标点和前一点,这就是为什么这是绘图程序一般之间做一个行来完成。

爱好者绘图程序将适合弯曲线以前的多个点来实现更自然的绘图笔画,但原理是相同的。

更新:根据评论,看起来你有一个计时器涉及您的绘图代码。这肯定是不必要的,因为只要移动鼠标,应用程序就会生成一个MouseMove事件,并且可以使用该事件绘制下一行。

+0

行,或某种[曲线](http://en.wikipedia.org/wiki/B%C3%A9zier_curve) – 2010-04-27 20:11:24

+0

“Bezier”=“适合弯曲线条到多个点”。 :) – MusiGenesis 2010-04-27 20:15:22

+0

创建这些数组作为指令来生成行,然后将它们推入每个操作的队列,然后弹出它们以进行撤消是一个好主意吗? – jmasterx 2010-04-27 20:16:45

2

你可以画一个短的曲线线之间的鼠标是0.001秒前和鼠标现在。

鼠标位置不连续,如果移动速度比慢得多,则会得到不连续的离散点。您需要使用您的首选方法在这些点之间进行插值。

+0

好吧,所以我使用计时器和绘制短直线的方式是正确的吗? – jmasterx 2010-04-27 20:10:19

+0

你可以使用贝塞尔曲线http://en.wikipedia.org/wiki/B%C3%A9zier_curve来获得一些好的效果。 – 2010-04-27 20:13:10

+1

你不需要计时器。您只需要记录以前的鼠标位置,然后画一条线到当前的鼠标位置。如果你正在做更有趣的插值(比如立方体),你只需要跟踪过去的更多点。 – 2010-04-27 20:13:48