NULL博文链接:https://luolong344378570.iteye.com/blog/11955602009第四届中国电信行业网络信息安全论坛优秀论文集置,当前拖动对象即通过坐标转换移动到什么位置。(3) mouseup的响应函数中只是重新让拖动对象可响应任意鼠标事件,并清空当前拖动对象。2鼠标拖动的坐标计算21用户坐标系的坐标转换原理所有的坐标转换,如 translate, scale,skew, rotate等都可以用一个3X3的转换矩阵来表示:各个坐标转换操作等同的矩阵如表1所示表1坐标转换的等同矩阵translate0000scalecos(arotatesin(a) cos(a) 0I tan(a 0skewewYtan(a 1 0001而把新坐标系中的坐标值转换为旧坐标系屮的學标值的计算公式为:III新00而且坐标转换是可以嵌套到任意一个层次的。如此,SVG中的任意一个元素的当前转换矩阵CTM( current transformation matrix)即为它以及它所有祖先元素(包括最顶层的元素)的华标转换的累积值。累积的方式是从最顶层坐标转换等同的矩阵开始一直右乘其下一层坐标转换等同的矩阵,直到当前元素。这说明CIM代表了从当前用户坐标系到视窗坐标系的坐标转换矩阵,如下所示。CTM=b, d,f, b, d, f..b. d f001视窗用户y树=CTM叫y用广1042009第四届中国电信行业网络信息安全论坛一优秀论文集22鼠标拖动的坐标计算公式及证明在上文的 mousemove函数中,我们已经有:当前光标位置和 mousedow时记录的光标位置在x、y轴上的差值 diffX、 diffy,还有 mousedow时记录的拖动对象的坐标转换 translate的参数值:txty,需要求出当前的参数值:tx'、ty'。依据用户坐标系和视窗坐标系之间的坐标转换原理,得到以下数学关系设 mousedowm时,拖动对象的a e10 txCTM=b d f.o。其中第一个矩阵是拖动对象的父结点的cIM,第二个矩阵是拖动对象的坐标转换 translate的等同矩阵。由此在鼠标拖动时,拖动对象新的a c e 10 txCTM=b d f0 1 ty'001,其中父结点的CTM不变,拖动对象的当前坐标转换translate的等同矩阵发生了变化!要计算出其中的tx’、ty',首先需要建立鼠标点下时的坐标转换关系视窗a c(10 tx用户视窗y用户00和鼠标移动时的坐标转换关系视窗用户视窗bdf|·01tyy用户001(001)(1其中x视窗X视窗=difI,y视y视= diffY,,二者即为光标前后位置在x、y轴上的差值,再按矩阵乘法运算法则计算得到个关于tx、ty的二元一次方程,如下:diffx a*(ttx)+ c*(tydiffy b*(tx'-tx)+ d*(ty解此方程,即可得到tx=tx+(d*diffX -c*diffy)/(a*d -b*c)ty(a*diffy -b*diffx/(a*d -b*c)最后重置拖动对象的” transform”属性的值为” translate(tx’,ty’)”即完成了准确的鼠标拖动。3试验结果与总结文中的给出的SvG文档模型仅给出了很少的规范,不限制程序员,给程序员以允分的自由,可在SvG文档中仼意位置进行坐标转换。文档模型全面、细致、有效地考虑了每个细节。而鼠标拖动的坐标计算公式是根据SVG规范得出的,并且给出了严密的数学证明。在任意有简单或复杂坐标系转换的sVG系统中都能有效地进行鼠标拖动的坐标计算,达到鼠标拖动的近乎完美的效果。最后我们将此技术应用到智能交通地图中,做成了组件形式。实现了地图SVG界面中窗口等元素的良好鼠标拖动效果。如下图1所示,图中的“地图工具”和“鹰眼”窗口以及其中的小拖动条或小矩形框都能够准确拖动。1052009第四届中国电信行业网络信息安全论坛一优秀论文集置能信息服务平台二TrGc地团周眼图层公交换铁器骑地图工具参考文献:[1] W3C. Scalable Vector Graphics(SVG)1. 1 Specification [EB/OL]. 2003-01-14(2009-04-30)[2009-06-12http://www.w3.org/tr/svgll/[2] W3C. Scalable Vector Graphics(svG) Tiny 1.2 Specification [EB/OL]. 2008-12-22 [2009-06-121http://www.w3org/tr/svgmobiLe12/作者简介李昌林(1985-),男,四川南充人,硕士在读,主要研究方向:智能交通、GIS;任会斌(1985-),男河北保定人,硕上在读,主要研究方向:高性能计算。106