如何判断鼠标是否在具有一定粗细的随手画曲线上(在Tcanvas上画的) ???(100分)

  • 主题发起人 主题发起人 happymanfreeman
  • 开始时间 开始时间
H

happymanfreeman

Unregistered / Unconfirmed
GUEST, unregistred user!
各位:
如何判断鼠标是否在具有一定粗细的随手画曲线上(在Tcanvas上画的) ??
请给出思路, 代码, 或例子. 谢谢 !!
 
如果你只是借用Canvas的Brush和Pen来实现的绘图,可能只有通过响应OnMouseMove事件来检查当前Point的颜色值进行判断了。但是如果想移动,删除节点等操作会很难。

建议你把你需要的图形做成类的方式来实现,不要直接画。具体我记得好象DelphiBox上有个矢量图的例子,你可以看看。
 
是啊, 这些问题均不太容易, 现在我只请大家帮助解决一个问题:

如何判断鼠标是否在具有一定粗细的随手画曲线上(在Tcanvas上画的) ??
请给出思路, 代码, 或例子. 谢谢 !!
 
这个不熟悉,但是感觉娃娃的思路应该是常用的办法
 
在画线时.把画出的对象加入到一个list,对象里可以包括画笔的大小,曲线中的各点坐标.
在判断时,可以加上画笔大小的连续两点区域.
如果楼主是向判断后删除该曲线,在重绘前,删除list中的该曲线对象
 
你知道如何判断一个点在直线上吗?
曲线是由多条直线组成的
你只要明白上面问题就能解决
 
大家回答问题要切题啊 !!!!! 我问的不是建立对象,加入,移动或删除对象的问题(这个问题我已经解决了 !!)

我问的是-----如何判断鼠标是否在具有一定粗细的随手画曲线上(在Tcanvas上画的) ??
这是个数学问题 ?? 假定鼠标坐标为(x,y), 随手画曲线上各点为(x1,y1), (x2,y2),
.... ,(xn,yn), 依次计算曲线上所有的点与鼠标坐标为(x,y)之间的距离,l1, l2,...
,ln, 这些距离中的最小的一个值 <=曲线粗细大小时, 可以判断鼠标在的曲线上,
否则不在曲线上, 这样的方法太笨了 !!! 效率太差了 !!! 
大家有没有好的算法 ???
 
先找到X或Y是否在曲线上,如果在的话,再找另一个值!
 
有好的算法啊,把你画的曲线改成控件来实现,比如说矢量图,然后控件肯定有mouseon这个事件的,在这个事件上不就可以判断了吗?不过难度非常大。
 
一些截图软件(如snagit等)带的图形编辑器都能选定随手画曲线并拖动,要选定随手画曲线,
首先就要判断-------鼠标是否在具有一定粗细的随手画曲线上 !!! 谁做过这样的软件 ?
谁有好的思路 ?? 谁能介绍针对性例子 ?? 不胜感谢 !!!
 
cqwty: 你说的控件的mouseon这个事件如何实现呢 ?? 不是又要进行我上述
所说的数学判断 ??!! 你这样说等于没说啊 !!!
 
根据鼠标移动快慢确定线条粗细,至于画,没什么好说的,直接Draw就是。
 
我的想法还是用颜色,当然,有个前提就是,你这个是准备做矢量图,而且背景没有复杂的图案。

首先,每次画线的时候,将所用的颜色和各个点的坐标保存进数据库中(当然,可以用内存表)

而当MouseMove时,可以先在颜色集中匹配(比如整个图有clRed, clBlue, clBlack三种颜色的线条,背景为白色),如果匹配到颜色,再查询线条坐标的覆盖区域,用PtInRect函数
 
你的曲线是怎么绘制的?至少你先把绘制的代码贴出来,方便大家分析
现在连调试的环境都搭不成
 
cnzzlp说的可行`
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
610
import
I
后退
顶部