I’m not sure how I’d ask “which key is it closest to” without computing distance, or some approximation thereof. In the end, I have a x,y coordinate (the touch) and a bucket of x,y,radius (or x1,y1,x2,y2) sets I have to compare them to. I can see how I could avoid some multiplies with rectangles, but not how I could avoid iterating thru the keys and calculating distance in some manner.
With the rectangles, your code is:
a = math.floor(y/rowHeight) - firstRowHeight b = math.floor(x/columnWidth) - firstColumnWidth + (a%2)*offset letter = key[a][b]
key is a table of keys indexed by row and then position-in-row. Needs a little adaptation for the “special” keys, but otherwise that’s it.
Hmm - ok, I see what you’re suggesting. That makes sense - special keys would simply be multiple entries in the table. That sounds straightforward to my sleep-addled mind.