C++ 绘图应用中的连续绘图

C++ 绘图应用中的连续绘图,c++,drawing,C++,Drawing,我想知道绘图应用程序如何在鼠标按下的整个时间内绘制,而不会出现空白。我的意思是,例如,如果程序只在鼠标的X,y坐标上画圆,那么如果鼠标移动得太快,它看起来就像是一堆小圆,而不是一条漂亮的直线。如果不在0.001秒前的鼠标位置和现在的鼠标位置之间不断绘制一条短直线,如何做到这一点。 谢谢您可以在0.001秒前的鼠标位置和现在的鼠标位置之间画一条短曲线 鼠标位置不是连续的,如果移动速度超过非常缓慢的速度,将得到离散的未连接点。您需要使用首选方法在这些点之间进行插值。您可以在0.001秒前的鼠标位置和

我想知道绘图应用程序如何在鼠标按下的整个时间内绘制,而不会出现空白。我的意思是,例如,如果程序只在鼠标的X,y坐标上画圆,那么如果鼠标移动得太快,它看起来就像是一堆小圆,而不是一条漂亮的直线。如果不在0.001秒前的鼠标位置和现在的鼠标位置之间不断绘制一条短直线,如何做到这一点。 谢谢

您可以在0.001秒前的鼠标位置和现在的鼠标位置之间画一条短曲线

鼠标位置不是连续的,如果移动速度超过非常缓慢的速度,将得到离散的未连接点。您需要使用首选方法在这些点之间进行插值。

您可以在0.001秒前的鼠标位置和现在的鼠标位置之间绘制一条短曲线

鼠标位置不是连续的,如果移动速度超过非常缓慢的速度,将得到离散的未连接点。您需要使用首选方法在这些点之间进行插值。

如果不在当前鼠标点和上一个点之间不断绘制一条线,则无法完成插值,这就是为什么绘图程序通常会这样做的原因

更爱画画的程序将曲线拟合到前面的多个点,以实现更自然的画笔,但原理是一样的

更新:根据注释,您的绘图代码中似乎包含计时器。这当然是不必要的,因为只要移动鼠标,应用程序就会生成MouseMove事件,您可以使用该事件绘制下一行。

如果不在当前鼠标点和上一点之间不断绘制一条线,则无法完成此操作,这就是为什么绘图程序通常会这样做

更爱画画的程序将曲线拟合到前面的多个点,以实现更自然的画笔,但原理是一样的



更新:根据注释,您的绘图代码中似乎包含计时器。这当然是不必要的,因为只要移动鼠标,应用程序就会生成MouseMove事件,您可以使用该事件绘制下一条线。

好的,那么我使用计时器绘制短直线的方法是正确的吗?您可以使用贝塞尔曲线来获得一些好的效果。您不需要计时器。您只需要记录上一个鼠标位置,然后画一条线到当前鼠标位置。如果您正在进行更高级的插值(例如,立方插值),您只需跟踪过去的更多点即可。@user146780:如果需要,请收听鼠标移动事件possible@NissanFan:更好的曲线应该是三次hermite样条曲线,如Catmull Rom或基数样条曲线。通过这种方式,你可以直接使用之前采样的点,而不是偏移它们,以使切线对齐。好吧,那么我使用计时器并绘制短直线的方式是正确的吗?你可以使用贝塞尔曲线来获得一些好的效果。你不需要计时器。您只需要记录上一个鼠标位置,然后画一条线到当前鼠标位置。如果您正在进行更高级的插值(例如,立方插值),您只需跟踪过去的更多点即可。@user146780:如果需要,请收听鼠标移动事件possible@NissanFan:更好的曲线应该是三次hermite样条曲线,如Catmull Rom或基数样条曲线。通过这种方式,您可以直接使用以前采样的点,而不是偏移它们,以便使切线对齐。@everyone:OP询问的是画笔工具如何工作,而不是直线tool@BlueRaja谢谢我也误解了:)@BlueRaja:你怎么会认为他/她/它在问关于画笔工具的问题?是的,是画笔工具,因此小圆圈:-p@everyone:OP询问笔刷工具如何工作,而不是线条tool@BlueRaja谢谢我也误解了:)@BlueRaja:你怎么会认为他/她/它在问关于画笔工具的问题?是的,这是画笔工具,因此有了小圆圈:-p创建这些数组作为生成行的指令是一个好主意,然后为每个操作将它们推到队列中,然后将它们弹出进行撤销吗?@user146780:嗯,是的,但您基本上描述了任何现代图形库的功能。我不知道C++世界里有什么,但是必须有很多选择,而不是滚动你自己。我宁愿自己做,也不愿使用lib,因为我想学习和理解底层代码。@user146:如果你说的是撤消/重做支持,你会想撤消用鼠标单击创建的整个图形块,不是在框架之间绘制的单独线条创建这些线条的数组作为生成线条的指令,然后将它们放入每个操作的队列中,然后将它们弹出进行撤销,这是一个好主意吗?@user146780:是的,但您基本上描述了任何现代图形库的功能。我不知道C++世界里有什么,但是必须有很多选择,而不是滚动你自己。我宁愿自己做,也不愿使用库,因为我想学习和理解底层代码。@user146:如果你说的是撤消/重做支持,你应该撤消用鼠标单击创建的整个图形块,而不是在帧之间绘制的单独线条