注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

WA!Peter

广州天河, 香港火炭,深圳罗湖, 北京国贸

 
 
 

日志

 
 

华诚方向公式 Cheng-Tam Direction formula  

2011-01-17 22:25:48|  分类: tech |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

-----问题定义-----

假设现在有两个坐标, 以(x1, y1)  和 (x2, y2) 分别代表坐标1和坐标2.

定义坐标1指向坐标2的方向(direction): 上UP, 右RIGHT, 下DOWN, 左LEFT 分别为常数 0, 1, 2, 3

上的定义为 y2-y1=1    x2-x1=0

下的定义为 y2-y1=-1    x2-x1=0

左的定义为 y2-y1=0    x2-x1=-1

右的定义为 y2-y1=0    x2-x1=1

此方向正好是套用Cartesian coordinate system  (y 向上越大, x向右越大)

需求:  以一条电脑公式, 输入为 x1, y1, x2, y2,  输出为方向常数(0=UP, 1=RIGHT, 2=DOWN, 3=LEFT)

以Java 为解答:

int direction(int x1, int y1, int x2, int y2)

{

    return ((x1-x2+1) & 3) + ((y2-y1 + 2) & 2) - 1;
}


配套的数学公式:  (dir = direction)

-  x-轴:    (dir & 1)==1

-  y-轴:    (dir & 1)==0

-  同轴反方向检查 (dir1, dir2)  :   abs(dir1-dir2) == 2

   例如 RIGHT,LEFT 是同轴,   UP, DOWN 也是同轴

- 同轴反方向计算 : revDir = ((dir + 2) & 3)

- 同轴验证:  (dir1 & 1)==(dir2 & 1)

- 顺时针转动90度  :  newDir = (dir + 1) & 3


-----------------------------------------------------------------------------------------------------------------------

此方法由peter 和同事 hua(程彦华)在若干年前计算出来, 为纪念才使用他的名字作为公式名称.

  评论这张
 
阅读(339)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017