refactor: reorganize docs into plan/ and add skills/

This commit is contained in:
2026-03-18 17:49:22 +08:00
parent fc7c8f6797
commit 9bad996ecf
143 changed files with 13263 additions and 0 deletions

63
docs/api/math/math-box.md Normal file
View File

@@ -0,0 +1,63 @@
# Box
带变换的有向包围盒 (OBB) 结构体。
## 头文件
```cpp
#include <XCEngine/Math/Box.h>
```
## 命名空间
`XCEngine::Math`
## 结构体定义
```cpp
struct Box {
Vector3 center = Vector3::Zero();
Vector3 extents = Vector3::Zero(); // 半长
Matrix4x4 transform = Matrix4x4::Identity();
};
```
OBB 由中心点、半长向量和变换矩阵定义。
## 构造函数
- `Box()` - 默认构造
- `Box(const Vector3& center, const Vector3& extents)` - 从中心和半长构造
## 实例方法
| 方法 | 返回值 | 描述 |
|------|--------|------|
| `GetMin()` | `Vector3` | 局部空间最小点 (-extents) |
| `GetMax()` | `Vector3` | 局部空间最大点 (+extents) |
| `Contains(point)` | `bool` | 点是否在盒内(变换到局部空间检测) |
| `Intersects(Sphere)` | `bool` | 与球体相交 |
| `Intersects(Box)` | `bool` | 与另一个 OBB 相交SAT 算法) |
| `Intersects(Ray, t)` | `bool` | 与射线相交,输出距离 t |
## 使用示例
```cpp
Box box(Vector3(0.0f), Vector3(1.0f)); // 2x2x2 盒子
box.transform = Matrix4::TRS(position, rotation, scale);
// 点检测
if (box.Contains(testPoint)) { ... }
// 球体相交
if (box.Intersects(sphere)) { ... }
// OBB 相交
if (box.Intersects(otherBox)) { ... }
// 射线相交
float t;
if (box.Intersects(ray, t)) {
Vector3 hit = ray.GetPoint(t);
}
```