H happymanfreeman Unregistered / Unconfirmed GUEST, unregistred user! 2006-12-26 #1 各位: 如何判断鼠标是否在具有一定粗细的随手画曲线上(在Tcanvas上画的) ?? 请给出思路, 代码, 或例子. 谢谢 !!
娃 娃娃 Unregistered / Unconfirmed GUEST, unregistred user! 2006-12-26 #2 如果你只是借用Canvas的Brush和Pen来实现的绘图,可能只有通过响应OnMouseMove事件来检查当前Point的颜色值进行判断了。但是如果想移动,删除节点等操作会很难。 建议你把你需要的图形做成类的方式来实现,不要直接画。具体我记得好象DelphiBox上有个矢量图的例子,你可以看看。
如果你只是借用Canvas的Brush和Pen来实现的绘图,可能只有通过响应OnMouseMove事件来检查当前Point的颜色值进行判断了。但是如果想移动,删除节点等操作会很难。 建议你把你需要的图形做成类的方式来实现,不要直接画。具体我记得好象DelphiBox上有个矢量图的例子,你可以看看。
H happymanfreeman Unregistered / Unconfirmed GUEST, unregistred user! 2006-12-26 #3 是啊, 这些问题均不太容易, 现在我只请大家帮助解决一个问题: 如何判断鼠标是否在具有一定粗细的随手画曲线上(在Tcanvas上画的) ?? 请给出思路, 代码, 或例子. 谢谢 !!
C cnzzlp Unregistered / Unconfirmed GUEST, unregistred user! 2006-12-26 #5 在画线时.把画出的对象加入到一个list,对象里可以包括画笔的大小,曲线中的各点坐标. 在判断时,可以加上画笔大小的连续两点区域. 如果楼主是向判断后删除该曲线,在重绘前,删除list中的该曲线对象
Z zswang Unregistered / Unconfirmed GUEST, unregistred user! 2006-12-26 #6 你知道如何判断一个点在直线上吗? 曲线是由多条直线组成的 你只要明白上面问题就能解决
H happymanfreeman Unregistered / Unconfirmed GUEST, unregistred user! 2006-12-26 #7 大家回答问题要切题啊 !!!!! 我问的不是建立对象,加入,移动或删除对象的问题(这个问题我已经解决了 !!) 我问的是-----如何判断鼠标是否在具有一定粗细的随手画曲线上(在Tcanvas上画的) ?? 这是个数学问题 ?? 假定鼠标坐标为(x,y), 随手画曲线上各点为(x1,y1), (x2,y2), .... ,(xn,yn), 依次计算曲线上所有的点与鼠标坐标为(x,y)之间的距离,l1, l2,... ,ln, 这些距离中的最小的一个值 <=曲线粗细大小时, 可以判断鼠标在的曲线上, 否则不在曲线上, 这样的方法太笨了 !!! 效率太差了 !!! 大家有没有好的算法 ???
大家回答问题要切题啊 !!!!! 我问的不是建立对象,加入,移动或删除对象的问题(这个问题我已经解决了 !!) 我问的是-----如何判断鼠标是否在具有一定粗细的随手画曲线上(在Tcanvas上画的) ?? 这是个数学问题 ?? 假定鼠标坐标为(x,y), 随手画曲线上各点为(x1,y1), (x2,y2), .... ,(xn,yn), 依次计算曲线上所有的点与鼠标坐标为(x,y)之间的距离,l1, l2,... ,ln, 这些距离中的最小的一个值 <=曲线粗细大小时, 可以判断鼠标在的曲线上, 否则不在曲线上, 这样的方法太笨了 !!! 效率太差了 !!! 大家有没有好的算法 ???
A angellover Unregistered / Unconfirmed GUEST, unregistred user! 2006-12-26 #8 先找到X或Y是否在曲线上,如果在的话,再找另一个值!
C cqwty Unregistered / Unconfirmed GUEST, unregistred user! 2006-12-26 #9 有好的算法啊,把你画的曲线改成控件来实现,比如说矢量图,然后控件肯定有mouseon这个事件的,在这个事件上不就可以判断了吗?不过难度非常大。
H happymanfreeman Unregistered / Unconfirmed GUEST, unregistred user! 2006-12-26 #10 一些截图软件(如snagit等)带的图形编辑器都能选定随手画曲线并拖动,要选定随手画曲线, 首先就要判断-------鼠标是否在具有一定粗细的随手画曲线上 !!! 谁做过这样的软件 ? 谁有好的思路 ?? 谁能介绍针对性例子 ?? 不胜感谢 !!!
一些截图软件(如snagit等)带的图形编辑器都能选定随手画曲线并拖动,要选定随手画曲线, 首先就要判断-------鼠标是否在具有一定粗细的随手画曲线上 !!! 谁做过这样的软件 ? 谁有好的思路 ?? 谁能介绍针对性例子 ?? 不胜感谢 !!!
H happymanfreeman Unregistered / Unconfirmed GUEST, unregistred user! 2006-12-26 #11 cqwty: 你说的控件的mouseon这个事件如何实现呢 ?? 不是又要进行我上述 所说的数学判断 ??!! 你这样说等于没说啊 !!!
M mantousoft Unregistered / Unconfirmed GUEST, unregistred user! 2006-12-26 #12 根据鼠标移动快慢确定线条粗细,至于画,没什么好说的,直接Draw就是。
娃 娃娃 Unregistered / Unconfirmed GUEST, unregistred user! 2006-12-26 #13 我的想法还是用颜色,当然,有个前提就是,你这个是准备做矢量图,而且背景没有复杂的图案。 首先,每次画线的时候,将所用的颜色和各个点的坐标保存进数据库中(当然,可以用内存表) 而当MouseMove时,可以先在颜色集中匹配(比如整个图有clRed, clBlue, clBlack三种颜色的线条,背景为白色),如果匹配到颜色,再查询线条坐标的覆盖区域,用PtInRect函数
我的想法还是用颜色,当然,有个前提就是,你这个是准备做矢量图,而且背景没有复杂的图案。 首先,每次画线的时候,将所用的颜色和各个点的坐标保存进数据库中(当然,可以用内存表) 而当MouseMove时,可以先在颜色集中匹配(比如整个图有clRed, clBlue, clBlack三种颜色的线条,背景为白色),如果匹配到颜色,再查询线条坐标的覆盖区域,用PtInRect函数
Z zswang Unregistered / Unconfirmed GUEST, unregistred user! 2006-12-26 #14 你的曲线是怎么绘制的?至少你先把绘制的代码贴出来,方便大家分析 现在连调试的环境都搭不成