如何精确地拾取任意形状的图元?
发布网友
发布时间:2024-10-21 16:16
我来回答
共1个回答
热心网友
时间:2024-10-21 16:42
最好新开一线程,否则时间消耗比较大的。
捕捉区,定义成一个以鼠标当前点为中心的正方形区域(或者圆形)。如果是直线,根据鼠标点和2端点的座标判断第一步,然后根据直线的斜率和正方形区域的极大点、极小点(跟直线的斜率相关)经过的斜率来确定直线是否穿过此正方形区域。
对应圆或者圆弧判断道理也是一样。具体不赘述。
对应B样条,要用插值点来判断了,根据B样条的算法,在曲线上取等分的一个一个的点(等分数当然越小越好,)然后找距离捕捉点最近的2个点,在这2个点之间再进行等分插枝(一直到插到距离为1),然后可求得距离捕捉点最近的2个B样条曲线上的点,在根据捕捉区域判断。。。。,会了吧
其实对于圆弧、直线也可以按照这个迭代法来实现的。只要知道线条的轨迹函数即可。
加:你说的2个方法不错,也不算太耗资源,不过还是最后新开一个线程来执行这些处理,否则主线程看起来会确实很卡的。
基本就这个方法了,没别的什么方法,如果你嫌位图操作很慢,其实你可以用兼容内存设备描述来管理位图数据,而不用每次导来导去的操作位图句柄。CDC.CreateCompatibleDC(); 这样操作就会快一些。