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