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

View File

@@ -0,0 +1,66 @@
# Plane
3D 平面结构体,由法线和距离表示。
## 头文件
```cpp
#include <XCEngine/Math/Plane.h>
```
## 命名空间
`XCEngine::Math`
## 结构体定义
```cpp
struct Plane {
Vector3 normal = Vector3::Up(); // 单位法线
float distance = 0.0f; // 原点到平面的有符号距离
};
```
平面方程: `dot(normal, X) + distance = 0`
## 构造函数
- `Plane()` - 默认构造 (y=0 平面)
- `Plane(const Vector3& normal, float distance)` - 从法线和距离构造
## 静态工厂方法
| 方法 | 返回值 | 描述 |
|------|--------|------|
| `FromPoints(a, b, c)` | `Plane` | 从三个不共线点创建 |
## 实例方法
| 方法 | 返回值 | 描述 |
|------|--------|------|
| `GetDistanceToPoint(point)` | `float` | 点到平面的有符号距离 |
| `GetClosestPoint(point)` | `Vector3` | 平面上最接近给定点的点 |
| `GetSide(point)` | `bool` | 点在平面的哪一侧 (true=正面) |
| `Intersects(Sphere)` | `bool` | 与球体相交 |
## 使用示例
```cpp
// 创建平面
Plane floor;
floor.normal = Vector3::Up();
floor.distance = 0.0f; // y=0 平面
// 或者从三点创建
Plane plane = Plane::FromPoints(p0, p1, p2);
// 检测点在哪侧
bool above = floor.GetSide(point);
float signedDist = floor.GetDistanceToPoint(point);
// 投影点到平面
Vector3 closest = floor.GetClosestPoint(point);
// 平面相交检测
if (plane.Intersects(sphere)) { ... }
```