## OBB 包围盒快速查找算法 ### 物品数据结构 ```typescript items = ItemJson[] interface ItemJson { // 物体ID, 唯一标识 id: string /** * 变换矩阵, 3x3矩阵, 采用Y轴向上为正, X轴向右, Z轴向前。右手坐标系 */ tf: [ /** * 平移向量 position, 三维坐标, [0]=x, [1]=高度值,在2D下忽略, [2]=z */ [number, number, number], /** * 旋转向量 rotation, 单位为度。对应 three.js 应进行"角度"转"弧度"的换算 [0]=X轴逆向旋转角度, [1]=Y轴逆向旋转角度, [2]=Z轴逆向旋转角度 */ [number, number, number], /** * 缩放向量 scale, 三维缩放比例, [0]=X宽度, [1]=Y高度,在2D下忽略, [2]=Z长度 */ [number, number, number], ] } ``` ### add(...items: ItemJson[]) 添加点位 add(...items: ItemJson[]) --- ### update(item: ItemJson) 更新点位 update(itemJson) --- ### deleteItem(id: string) 删除点位 deleteItem(id: string) --- ### getItemsByPosition(x:number, z:number): ItemJson[] 根据位置,获取命中的物品集合 getItemsByPosition({x:number, z:number}): ItemJson[] --- ### getItemsByPositionDistance(x, z, distance): {item, distance}[] getItemsByPositionDistance(x:number, z:number, distance:number): {item:ItemJson, distance:number}[] 根据位置,获取周边单位距离内的所有物品集合,及距离 --- (选择框) ### getItemsByRect(x1,y1,x2,y2): ItemJson[] 根据矩形,获取与矩形有碰撞的所有物品集合 getItemsByPosition({x:number, z:number}): ItemJson[] --- ### getItemsByRect2(x1,y1,x2,y2): ItemJson[] 根据矩形,获取矩形内的所有物品,物品OBB包围盒必须完全在矩形内 getItemsByPosition({x:number, z:number}): ItemJson[]