3 changed files with 178 additions and 0 deletions
@ -0,0 +1,94 @@ |
|||||
|
## 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[] |
||||
|
After Width: | Height: | Size: 5.3 KiB |
Loading…
Reference in new issue