You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1.8 KiB
1.8 KiB
OBB 包围盒快速查找算法
物品数据结构
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[]