# ktm
**Repository Path**: shbfeng/ktm
## Basic Information
- **Project Name**: ktm
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-09-29
- **Last Updated**: 2026-09-29
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
> **k**u**t**ori **m**ath,珂朵莉数学库,属于珂学家的图形数学库
✨**如果你喜欢珂朵莉,给我点一点小星星**✨
[](https://github.com/YGXXD/ktm/archive/main.zip) [](LICENSE) [](https://github.com/YGXXD/ktm/tags)
### 环境
- 编译器:cl,clang,gcc;
- c++版本:c++17及以上;
### 特性
- head-only,api层次清晰,包含头文件即可接入项目;
- 代码结构优雅,基本数学类由[模板继承组件化](#组件设计)实现静态ECS;
- 高性能跨平台,simd指令集加速提供计算性能优化;
### 构建和安装
```shell
# unix
mkdir build && cd build
cmake ..
sudo make install
# windows
cmake -S . -B ./build
cmake --install ./build --config Release
```
### 项目中使用
```cmake
# CMakeLists
add_executable(exemple main.cpp)
find_package(ktm REQUIRED)
target_link_libraries(exemple PUBLIC ktm::ktm)
```
### 示例
```c++
#include
#include
using namespace ktm;
using namespace std;
int main(int argv, char* argc[])
{
// 构造向量vector
fvec3 vector { 5.f, -5.f, 1.f };
// 通过旋转角和轴构建四元数quaternion
fquat quaternion = fquat::angle_axis(half_pi, fvec3(0.f, 0.6f, 0.8f));
// 利用四元数quaternion旋转向量vector
cout << quaternion * vector << endl;
// 通过四元数quaternion构建旋转矩阵rotate
fmat3x3 rotate = quaternion.matrix3x3();
// 利用矩阵rotate旋转向量vector
cout << rotate * vector << endl;
// 构建仿射变换affine, 定义矩阵model
faffine3d affine { }; fmat4x4 model;
// 仿射变换affine进行平移旋转缩放后, 输入到矩阵model
affine.translate(2.f, 1.f, -3.f).rotate(quaternion).scale(2.f, 2.f, 4.f) >> model;
// 利用矩阵model变换向量vector
cout << model * fvec4(vector, 1.f) << endl;
// 构建视口变换矩阵view
fmat4x4 view = look_at_lh(fvec3(10.f, 10.f, 10.f), fvec3(), fvec3(0.f, 0.f, 1.f));
// 构建投影变换矩阵projection
fmat4x4 projection = perspective_lh(0.5f * half_pi, 16.f / 9.f, 0.1f, 100.f);
// 利用矩阵model, view, projection构建mvp变换矩阵
cout << projection * view * model << endl;
return 0;
}
```
### 组件设计
**ECS架构图**
**共享组件**
|组件|功能|
|:-|:-|
|[iarray_util](ktm/interface/shared/iarray_util.h)|支持std::array的特性的包装组件|
|[iarray_add](ktm/interface/shared/iarray_calc.h)|数组和数组之间的加减运算|
|[iarray_mul](ktm/interface/shared/iarray_calc.h)|数组和数组之间的乘除运算|
|[iarray_madd](ktm/interface/shared/iarray_calc.h)|数组和数组之间的乘加复合运算|
|[iarray_add_scalar](ktm/interface/shared/iarray_calc.h)|数组和标量之间的加减运算|
|[iarray_mul_scalar](ktm/interface/shared/iarray_calc.h)|数组和标量之间的乘除运算|
|[iarray_madd_scalar](ktm/interface/shared/iarray_calc.h)|数组和标量之间的乘加复合运算|
|[iarray_io](ktm/interface/shared/iarray_io.h)|数组的输入输出,集成std标准IO流|
|[iarray_tostring](ktm/interface/shared/iarray_tostring.h)|数组到字符串的转换功能|
**向量组件**
|组件|功能|
|:-|:-|
|[ivec_calc](ktm/interface/vector/ivec_calc.h)|三维向量和三维向量,三位向量和标量之间的加减乘除运算|
|[ivec_array](ktm/interface/vector/ivec_array.h)|支持向量强制转化为数组|
|[ivec_data](ktm/interface/vector/ivec_data.h)|包含向量的数据,构造函数,向量混洗|
**矩阵组件**
|组件|功能|
|:-|:-|
|[imat_mul](ktm/interface/matrix/imat_mul.h)|矩阵和矩阵,矩阵和向量之间的乘法运算|
|[imat_array](ktm/interface/matrix/imat_array.h)|支持矩阵强制转化为数组|
|[imat_make](ktm/interface/matrix/imat_make.h)|提供了构造矩阵的静态方法|
|[imat_data](ktm/interface/matrix/imat_data.h)|包含矩阵的数据和构造函数|
**四元数组件**
|组件|功能|
|:-|:-|
|[iquat_mul](ktm/interface/quaternion/iquat_mul.h)|四元数和四元数,四元数和三维向量之间的乘法运算|
|[iquat_array](ktm/interface/quaternion/iquat_array.h)|支持四元数强制转化为数组|
|[iquat_make](ktm/interface/quaternion/iquat_make.h)|提供了构造四元数的静态方法|
|[iquat_data](ktm/interface/quaternion/iquat_data.h)|包含四元数的数据,构造函数,获取四元数旋转信息的方法|
**复数组件**
|组件|功能|
|:-|:-|
|[icomp_mul](ktm/interface/complex/icomp_mul.h)|复数和复数,复数和二维向量之间的乘法运算|
|[icomp_array](ktm/interface/complex/icomp_array.h)|支持复数强制转化为数组|
|[icomp_make](ktm/interface/complex/icomp_make.h)|提供了构造复数的静态方法|
|[icomp_data](ktm/interface/complex/icomp_data.h)|包含复数的数据,构造函数,获取复数旋转信息的方法|
**复合组件**
|组件|组成部分|
|:-|:-|
|[iarray_add_calc](ktm/interface/shared/iarray_calc.h)|iarray_add,iarray_add_scalar|
|[iarray_mul_calc](ktm/interface/shared/iarray_calc.h)|iarray_mul,iarray_mul_scalar|
|[iarray_madd_calc](ktm/interface/shared/iarray_calc.h)|iarray_madd,iarray_madd_scalar|
|[iarray_calc](ktm/interface/shared/iarray_calc.h)|iarray_add_calc,iarray_mul_calc,iarray_madd_calc|
**基本数学类**
|类|组成部分|
|:-|:-|
|[vec](ktm/type/vec.h)|ivec_data,ivec_array,ivec_calc,iarray_tostring,iarray_io,iarray_calc,iarray_util|
|[mat](ktm/type/mat.h)|imat_data,imat_make,imat_array,imat_mul,iarray_tostring,iarray_io,iarray_add_calc,iarray_madd_scalar,iarray_mul_scalar,iarray_util|
|[quat](ktm/type/quat.h)|iquat_data,iquat_make,iquat_array,iquat_mul,iarray_tostring,iarray_io,iarray_add_calc,iarray_madd_scalar,iarray_mul_scalar,iarray_util|
|[comp](ktm/type/comp.h)|icomp_data,icomp_make,icomp_array,icomp_mul,iarray_tostring,iarray_io,iarray_add_calc,iarray_madd_scalar,iarray_mul_scalar,iarray_util|
### 许可证
ktm使用MIT许可证,详细信息请参见[LICENSE](LICENSE)文件。