kutori math,珂朵莉数学库,属于珂学家的图形数学库
✨如果你喜欢珂朵莉,给我点一点小星星✨
- 编译器:cl,clang,gcc;
- c++版本:c++17及以上;
- head-only,api层次清晰,包含头文件即可接入项目;
- 代码结构优雅,基本数学类由模版继承组件化实现静态ECS;
- 高性能跨平台,simd指令集加速提供计算性能优化;
# unix
mkdir build && cd build
cmake ..
sudo make install
# windows
cmake -S . -B ./build
cmake --install ./build --config Release
#include <ktm/ktm.h>
#include <iostream>
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<float>, 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<float>, 16.f / 9.f, 0.1f, 100.f);
// 利用矩阵model, view, projection构建mvp变换矩阵
cout << projection * view * model << endl;
return 0;
}
共享组件
组件 | 功能 |
---|---|
iarray_add | 数组和数组之间的加减运算 |
iarray_mul | 数组和数组之间的乘除运算 |
iarray_madd | 数组和数组之间的乘加复合运算 |
iarray_add_scalar | 数组和标量之间的加减运算 |
iarray_mul_scalar | 数组和标量之间的乘除运算 |
iarray_madd_scalar | 数组和标量之间的乘加复合运算 |
iarray_io | 数组的输入输出,集成std标准IO流 |
iarray_util | 支持std::array的特性的包装组件 |
向量组件
组件 | 功能 |
---|---|
ivec_calc | 三维向量和三维向量,三位向量和标量之间的加减乘除运算 |
ivec_calc | 支持向量强制转化为数组 |
ivec_calc | 包含向量的数据,构造函数,向量混洗 |
矩阵组件
组件 | 功能 |
---|---|
imat_mul | 矩阵和矩阵,矩阵和向量之间的乘法运算 |
imat_array | 支持矩阵强制转化为数组 |
imat_make | 提供了构造矩阵的静态方法 |
imat_data | 包含矩阵的数据和构造函数 |
四元数组件
组件 | 功能 |
---|---|
iquat_mul | 四元数和四元数,四元数和三维向量之间的乘法运算 |
iquat_array | 支持四元数强制转化为数组 |
iquat_make | 提供了构造四元数的静态方法 |
iquat_data | 包含四元数的数据,构造函数,获取四元数旋转信息的方法 |
复数组件
组件 | 功能 |
---|---|
icomp_mul | 复数和复数,复数和二维向量之间的乘法运算 |
icomp_array | 支持复数强制转化为数组 |
icomp_make | 提供了构造复数的静态方法 |
icomp_data | 包含复数的数据,构造函数,获取复数旋转信息的方法 |
复合组件
组件 | 组成部分 |
---|---|
iarray_add_calc | iarray_add,iarray_add_scalar |
iarray_mul_calc | iarray_mul,iarray_mul_scalar |
iarray_madd_calc | iarray_madd,iarray_madd_scalar |
iarray_calc | iarray_add_calc,iarray_mul_calc,iarray_madd_calc |
基本数学类
类 | 组成部分 |
---|---|
vec | ivec_data,ivec_array,ivec_calc,iarray_io,iarray_calc,iarray_util |
mat | imat_data,imat_make,imat_array,imat_mul,iarray_io,iarray_add,iarray_madd_scalar,iarray_mul_scalar,iarray_util |
quat | iquat_data,iquat_make,iquat_array,iquat_mul,iarray_io,iarray_add,iarray_madd_scalar,iarray_mul_scalar,iarray_util |
comp | icomp_data,icomp_make,icomp_array,icomp_mul,iarray_io,iarray_add,iarray_madd_scalar,iarray_mul_scalar,iarray_util |
ktm使用MIT许可证,详细信息请参见LICENSE文件。