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.7 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[]