0$房天下问答|请教以下 flash as3$https://m.fang.com/ask/ask_1184207.html$https://static.soufunimg.com/common_m/m_public/201511/images/asksharedefault.png
packc/pages/ask/detail/detail?askid=1184207
-
请教以下 flash as3
// 获取两点间方向距离对像 public function getP2PLength(s_node : Node , e_node : Node) : Object { var m_R : int = 0 ; var pR : Number = 0.0 ; var m_r : Number = 0.0 ; var m_size : Size = new Size() ; var r_data : Object = new Object() ; m_size.w = (e_node.x - s_node.x) ; m_size.h = (e_node.y - s_node.y) ; if(Math.abs(m_size.w) > Math.abs(m_size.h)) { r_data.length = Math.abs(m_size.w) ; }else{ r_data.length = Math.abs(m_size.h) ; } m_r = Math.sqrt(m_size.w * m_size.w + m_size.h * m_size.h) ; pR = Math.acos(m_size.w / m_r) ; if(e_node.y - s_node.y < 0) { pR = -pR ; } m_R = pR * 180 / Math.PI ; // x > 0 y = 0 ; if(m_R < 22.5 && m_R >= -22.5) { r_data.x = e_node.x ; r_data.y = s_node.y ; r_data.fx = _type.RIGHT ; //方向=右 r_data.isN = true ; //选择状态=true return r_data ; } // x = 0 y > 0 ; if(m_R < 112.5 && m_R >= 67.5) { r_data.x = s_node.x ; r_data.y = e_node.y ; r_data.fx = _type.DOWN ; r_data.isN = true ; return r_data ; } // x < 0 y = 0 ; if(m_R >= 157.5 && m_R <= 180 || m_R > -180 && m_R < -157.5) { r_data.x = e_node.x ; r_data.y = s_node.y ; r_data.fx = _type.LEFT ; r_data.isN = true ; return r_data ; } // x = 0 y < 0 ; if(m_R >= -112.5 && m_R < -67.5) { r_data.x = s_node.x ; r_data.y = e_node.y ; r_data.fx = _type.UP ; r_data.isN = true ; return r_data ; } r_data.isN = false ; return r_data ; } }}
更多
共1个回答
-
-
-
ainin1999
丨Lv 0
public function getP2PLength(s_node : Node , e_node : Node) : Object //该公有函数两个参数,分别代表起点和终点,函数返回值为对象。(事实上考虑的是两点作成的向量,既有长度又有方向的量){ var m_R : int = 0 ;//记录两点所成向量的方向余弦的角度值var pR : Number = 0.0 ; //记录两点所成向量的方向余弦的弧度值var m_r : Number = 0.0 ; //记录两点距离的变量var m_size : Size = new Size() ; //记录坐标差的Size类的实例变量var r_data : Object = new Object() ; //记录返回数据的对象m_size.w = (e_node.x - s_node.x) ; //终点与起点横坐标的差m_size.h = (e_node.y - s_node.y) ; //终点与起点纵坐标的差if(Math.abs(m_size.w) > Math.abs(m_size.h)) { r_data.length = Math.abs(m_size.w) ; }else{ r_data.length = Math.abs(m_size.h) ; } //如果横坐标之差大于纵坐标之差,r_data.length为横坐标之差;如果横坐标之差小于或等于纵坐标之差,r_data.length为纵坐标之差;m_r = Math.sqrt(m_size.w * m_size.w + m_size.h * m_size.h) ; //求起点到终点的直线距离pR = Math.acos(m_size.w / m_r) ; //求向量的方向余弦if(e_node.y - s_node.y < 0) { pR = -pR ; } //如果终点在起点左侧,则将pR取反m_R = pR * 180 / Math.PI ; //pR是弧度值,将其转换成角度//以下按照不同的情况,为r_data的各项属性复制,作为函数的返回值// x > 0 y = 0 ; if(m_R < 22.5 && m_R >= -22.5) { r_data.x = e_node.x ; r_data.y = s_node.y ; r_data.fx = _type.RIGHT ; //方向=右 r_data.isN = true ; //选择状态=true return r_data ; } // x = 0 y > 0 ; if(m_R < 112.5 && m_R >= 67.5) { r_data.x = s_node.x ; r_data.y = e_node.y ; r_data.fx = _type.DOWN ; r_data.isN = true ; return r_data ; } // x < 0 y = 0 ; if(m_R >= 157.5 && m_R <= 180 || m_R > -180 && m_R < -157.5) { r_data.x = e_node.x ; r_data.y = s_node.y ; r_data.fx = _type.LEFT ; r_data.isN = true ; return r_data ; } // x = 0 y < 0 ; if(m_R >= -112.5 && m_R < -67.5) { r_data.x = s_node.x ; r_data.y = e_node.y ; r_data.fx = _type.UP ; r_data.isN = true ; return r_data ; } r_data.isN = false ; return r_data ; } } }
免责声明:问答内容均来源于互联网用户,房天下对其内容不负责任,如有版权或其他问题可以联系房天下进行删除。

关注成功