45度角地图坐标计算

来源:互联网 发布:微信刷屏软件 编辑:程序博客网 时间:2024/04/30 09:41

已知图片上的一个触摸点,怎么求其落在地图的哪个瓦块上?


 

已知:

瓦块尺寸64*32pt, 瓦块数20*20, 地图尺寸1280*640pt如图, 图片的原点是o1 地图原点是o2
向量: o1p, o1o2
地图坐标系的基向量: u, v
瓦块的宽的1/2: w
瓦块的高的1/2: h
o2的坐标: (W, H)
p的坐标:(x, y)

求:
m, n 使得 o2p=m*u+n*v

解:
根据向量减法
o2p=o1p-o1o2

o2p=(x, y) - (W, H)=(x-W, y-H)

u=(w, -h)
v=(-w, -h) 
o2p=m(w, -h)+n(-w, -h) 

(x-W, y-H) = m(w, -h)+n(-w, -h) 
得二元一次方程组
x-W=mw-nw
H-y=mh+nh
解得

m = (Hw - yw + xh - Wh) / (2wh)

n = (Hw - yw + Wh - xh) / (2wh)


注意m,n要截去小数部分
截去小数部分时,不能直接int iM = int(m);因为如果m==-0.5时,会被规整成0,而-0.5不合法.
所以先判断m,n的边界,再规整成整数 

则触摸点p落在了第(m, n)个瓦块上 

0 0