已知图片上的一个触摸点,怎么求其落在地图的哪个瓦块上?
已知:
瓦块尺寸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)个瓦块上