24#ifndef STELLARLIB_LIN_LIN_HPP
25#define STELLARLIB_LIN_LIN_HPP
28#include <stellarlib/lin/intrinsics.hpp>
29#include <stellarlib/lin/matrix.hpp>
30#include <stellarlib/lin/transformations.hpp>
47template <
typename T, std::
size_t M = 4, std::
size_t N = 4>
48using matrix = internal::matrix<T, M, N>;
55template <
typename T, std::
size_t N = 4>
1166using internal::acos;
1181using internal::asin;
1186using internal::atan;
1191using internal::atan2;
1196using internal::ceil;
1201using internal::clamp;
1211using internal::cosh;
1216using internal::cross;
1221using internal::degrees;
1226using internal::determinant;
1231using internal::distance;
1251using internal::exp2;
1256using internal::faceforward;
1261using internal::floor;
1271using internal::fmod;
1276using internal::frac;
1281using internal::ldexp;
1286using internal::length;
1291using internal::lerp;
1306using internal::log10;
1311using internal::log2;
1331using internal::modf;
1341using internal::normalize;
1351using internal::radians;
1361using internal::reflect;
1366using internal::refract;
1371using internal::round;
1376using internal::rsqrt;
1381using internal::saturate;
1386using internal::sign;
1396using internal::sincos;
1401using internal::sinh;
1406using internal::smoothstep;
1411using internal::sqrt;
1416using internal::step;
1426using internal::tanh;
1431using internal::transpose;
1436using internal::trunc;
Linear algebra utilities.
Definition intrinsics.hpp:42
vector< std::int16_t, 3 > short3
3D short vector
Definition lin.hpp:131
matrix< std::int32_t, 2, 1 > int2x1
2x1 integer matrix
Definition lin.hpp:686
uint4 uint1x4
1x4 unsigned integer matrix
Definition lin.hpp:821
matrix< bool, 2, 1 > bool2x1
2x1 boolean matrix
Definition lin.hpp:286
float3 float1x3
1x3 float matrix
Definition lin.hpp:1041
matrix< double > double4x4
4x4 double matrix
Definition lin.hpp:1156
matrix< std::uint32_t > uint4x4
4x4 unsigned integer matrix
Definition lin.hpp:836
matrix< float, 4, 3 > float4x3
4x3 float matrix
Definition lin.hpp:1056
vector< std::uint64_t, 2 > ulong2
2D unsigned long vector
Definition lin.hpp:226
double2 double1x2
1x2 double matrix
Definition lin.hpp:1101
vector< std::uint64_t > ulong4
4D unsigned long vector
Definition lin.hpp:236
matrix< std::int64_t, 4, 1 > long4x1
4x1 long matrix
Definition lin.hpp:856
vector< std::int8_t, 3 > char3
3D char vector
Definition lin.hpp:91
matrix< std::uint64_t, 3, 3 > ulong3x3
3x3 unsigned long matrix
Definition lin.hpp:971
matrix< std::int64_t, 3 > long3x4
3x4 long matrix
Definition lin.hpp:911
matrix< std::int16_t, 4, 3 > short4x3
4x3 short matrix
Definition lin.hpp:576
vector< std::uint8_t > uchar4
4D unsigned char vector
Definition lin.hpp:116
matrix< float, 3, 1 > float3x1
3x1 float matrix
Definition lin.hpp:1011
matrix< std::uint8_t, 2, 3 > uchar2x3
2x3 unsigned char matrix
Definition lin.hpp:486
matrix< std::int32_t, 2, 2 > int2x2
2x2 integer matrix
Definition lin.hpp:706
matrix< float, 3, 2 > float3x2
3x2 float matrix
Definition lin.hpp:1031
uchar1 uchar1x1
1x1 unsigned char matrix
Definition lin.hpp:441
matrix< std::uint64_t, 2, 3 > ulong2x3
2x3 unsigned long matrix
Definition lin.hpp:966
vector< std::uint64_t, 1 > ulong1
1D unsigned long vector
Definition lin.hpp:221
matrix< std::uint32_t, 2, 3 > uint2x3
2x3 unsigned integer matrix
Definition lin.hpp:806
ulong3 ulong1x3
1x3 unsigned long matrix
Definition lin.hpp:961
matrix< std::int64_t, 3, 3 > long3x3
3x3 long matrix
Definition lin.hpp:891
vector< std::int8_t > char4
4D char vector
Definition lin.hpp:96
matrix< std::uint16_t, 4, 2 > ushort4x2
4x2 unsigned short matrix
Definition lin.hpp:636
matrix< std::uint64_t, 3, 2 > ulong3x2
3x2 unsigned long matrix
Definition lin.hpp:951
matrix< float, 3, 3 > float3x3
3x3 float matrix
Definition lin.hpp:1051
int1 int1x1
1x1 integer matrix
Definition lin.hpp:681
matrix< std::int16_t, 2, 3 > short2x3
2x3 short matrix
Definition lin.hpp:566
matrix< std::int16_t, 2, 2 > short2x2
2x2 short matrix
Definition lin.hpp:546
long2 long1x2
1x2 long matrix
Definition lin.hpp:861
vector< std::uint32_t, 1 > uint1
1D unsigned integer vector
Definition lin.hpp:181
matrix< std::uint16_t, 2, 1 > ushort2x1
2x1 unsigned short matrix
Definition lin.hpp:606
matrix< std::uint8_t, 4, 3 > uchar4x3
4x3 unsigned char matrix
Definition lin.hpp:496
long3 long1x3
1x3 long matrix
Definition lin.hpp:881
ulong1 ulong1x1
1x1 unsigned long matrix
Definition lin.hpp:921
matrix< std::int16_t, 2 > short2x4
2x4 short matrix
Definition lin.hpp:586
ushort2 ushort1x2
1x2 unsigned short matrix
Definition lin.hpp:621
matrix< std::uint16_t, 3, 2 > ushort3x2
3x2 unsigned short matrix
Definition lin.hpp:631
vector< double > double4
4D double vector
Definition lin.hpp:276
matrix< double, 3, 3 > double3x3
3x3 double matrix
Definition lin.hpp:1131
matrix< std::int32_t, 3, 3 > int3x3
3x3 integer matrix
Definition lin.hpp:731
matrix< std::uint8_t, 3, 3 > uchar3x3
3x3 unsigned char matrix
Definition lin.hpp:491
matrix< double, 2, 3 > double2x3
2x3 double matrix
Definition lin.hpp:1126
float2 float1x2
1x2 float matrix
Definition lin.hpp:1021
matrix< std::uint8_t, 4, 1 > uchar4x1
4x1 unsigned char matrix
Definition lin.hpp:456
matrix< std::uint64_t, 4, 3 > ulong4x3
4x3 unsigned long matrix
Definition lin.hpp:976
matrix< std::uint32_t, 2 > uint2x4
2x4 unsigned integer matrix
Definition lin.hpp:826
matrix< std::uint64_t, 3 > ulong3x4
3x4 unsigned long matrix
Definition lin.hpp:991
double3 double1x3
1x3 double matrix
Definition lin.hpp:1121
matrix< bool, 4, 1 > bool4x1
4x1 boolean matrix
Definition lin.hpp:296
matrix< std::uint32_t, 3, 3 > uint3x3
3x3 unsigned integer matrix
Definition lin.hpp:811
char3 char1x3
1x3 char matrix
Definition lin.hpp:401
char2 char1x2
1x2 char matrix
Definition lin.hpp:381
matrix< std::uint16_t, 3, 1 > ushort3x1
3x1 unsigned short matrix
Definition lin.hpp:611
vector< std::int64_t, 2 > long2
2D long vector
Definition lin.hpp:206
bool3 bool1x3
1x3 boolean matrix
Definition lin.hpp:321
matrix< std::uint64_t > ulong4x4
4x4 unsigned long matrix
Definition lin.hpp:996
matrix< std::int16_t, 3, 1 > short3x1
3x1 short matrix
Definition lin.hpp:531
matrix< std::int16_t, 4, 2 > short4x2
4x2 short matrix
Definition lin.hpp:556
matrix< std::int16_t, 4, 1 > short4x1
4x1 short matrix
Definition lin.hpp:536
short4 short1x4
1x4 short matrix
Definition lin.hpp:581
matrix< float, 2 > float2x4
2x4 float matrix
Definition lin.hpp:1066
int2 int1x2
1x2 integer matrix
Definition lin.hpp:701
matrix< std::uint8_t, 2, 2 > uchar2x2
2x2 unsigned char matrix
Definition lin.hpp:466
matrix< std::int32_t > int4x4
4x4 integer matrix
Definition lin.hpp:756
matrix< double, 4, 3 > double4x3
4x3 double matrix
Definition lin.hpp:1136
matrix< std::int16_t, 3, 2 > short3x2
3x2 short matrix
Definition lin.hpp:551
matrix< std::uint16_t, 4, 3 > ushort4x3
4x3 unsigned short matrix
Definition lin.hpp:656
matrix< std::int8_t, 2, 1 > char2x1
2x1 char matrix
Definition lin.hpp:366
float4 float1x4
1x4 float matrix
Definition lin.hpp:1061
double1 double1x1
1x1 double matrix
Definition lin.hpp:1081
matrix< T, 1, N > vector
Generic N-dimensional vector with per-component operations.
Definition lin.hpp:56
matrix< std::int8_t > char4x4
4x4 char matrix
Definition lin.hpp:436
matrix< std::int8_t, 2 > char2x4
2x4 char matrix
Definition lin.hpp:426
vector< std::int64_t > long4
4D long vector
Definition lin.hpp:216
matrix< std::uint32_t, 4, 2 > uint4x2
4x2 unsigned integer matrix
Definition lin.hpp:796
matrix< std::uint32_t, 3 > uint3x4
3x4 unsigned integer matrix
Definition lin.hpp:831
matrix< float, 4, 1 > float4x1
4x1 float matrix
Definition lin.hpp:1016
long1 long1x1
1x1 long matrix
Definition lin.hpp:841
bool2 bool1x2
1x2 boolean matrix
Definition lin.hpp:301
matrix< bool, 3 > bool3x4
3x4 boolean matrix
Definition lin.hpp:351
vector< std::uint16_t > ushort4
4D unsigned short vector
Definition lin.hpp:156
matrix< float, 2, 3 > float2x3
2x3 float matrix
Definition lin.hpp:1046
matrix< bool, 4, 3 > bool4x3
4x3 boolean matrix
Definition lin.hpp:336
ushort3 ushort1x3
1x3 unsigned short matrix
Definition lin.hpp:641
int4 int1x4
1x4 integer matrix
Definition lin.hpp:741
matrix< std::int64_t > long4x4
4x4 long matrix
Definition lin.hpp:916
matrix< std::int64_t, 4, 2 > long4x2
4x2 long matrix
Definition lin.hpp:876
matrix< std::uint32_t, 2, 1 > uint2x1
2x1 unsigned integer matrix
Definition lin.hpp:766
vector< bool, 3 > bool3
3D boolean vector
Definition lin.hpp:71
matrix< std::int16_t > short4x4
4x4 short matrix
Definition lin.hpp:596
matrix< std::int8_t, 3 > char3x4
3x4 char matrix
Definition lin.hpp:431
matrix< std::int32_t, 2 > int2x4
2x4 integer matrix
Definition lin.hpp:746
matrix< double, 3, 1 > double3x1
3x1 double matrix
Definition lin.hpp:1091
uint3 uint1x3
1x3 unsigned integer matrix
Definition lin.hpp:801
vector< std::int16_t, 2 > short2
2D short vector
Definition lin.hpp:126
float1 float1x1
1x1 float matrix
Definition lin.hpp:1001
ulong4 ulong1x4
1x4 unsigned long matrix
Definition lin.hpp:981
char1 char1x1
1x1 char matrix
Definition lin.hpp:361
matrix< std::int32_t, 3, 2 > int3x2
3x2 integer matrix
Definition lin.hpp:711
matrix< std::int64_t, 2 > long2x4
2x4 long matrix
Definition lin.hpp:906
matrix< double, 2, 1 > double2x1
2x1 double matrix
Definition lin.hpp:1086
matrix< std::int32_t, 4, 1 > int4x1
4x1 integer matrix
Definition lin.hpp:696
matrix< bool, 3, 2 > bool3x2
3x2 boolean matrix
Definition lin.hpp:311
vector< std::int16_t, 1 > short1
1D short vector
Definition lin.hpp:121
short2 short1x2
1x2 short matrix
Definition lin.hpp:541
matrix< std::int32_t, 3 > int3x4
3x4 integer matrix
Definition lin.hpp:751
vector< std::int64_t, 3 > long3
3D long vector
Definition lin.hpp:211
matrix< std::int8_t, 2, 3 > char2x3
2x3 char matrix
Definition lin.hpp:406
matrix< std::uint32_t, 4, 1 > uint4x1
4x1 unsigned integer matrix
Definition lin.hpp:776
vector< bool > bool4
4D boolean vector
Definition lin.hpp:76
vector< std::int32_t, 2 > int2
2D integer vector
Definition lin.hpp:166
short1 short1x1
1x1 short matrix
Definition lin.hpp:521
uint1 uint1x1
1x1 unsigned integer matrix
Definition lin.hpp:761
matrix< double, 2, 2 > double2x2
2x2 double matrix
Definition lin.hpp:1106
matrix< bool, 2, 2 > bool2x2
2x2 boolean matrix
Definition lin.hpp:306
matrix< float, 3 > float3x4
3x4 float matrix
Definition lin.hpp:1071
ushort4 ushort1x4
1x4 unsigned short matrix
Definition lin.hpp:661
uchar3 uchar1x3
1x3 unsigned char matrix
Definition lin.hpp:481
matrix< std::uint64_t, 2, 1 > ulong2x1
2x1 unsigned long matrix
Definition lin.hpp:926
matrix< std::uint16_t, 3 > ushort3x4
3x4 unsigned short matrix
Definition lin.hpp:671
matrix< float > float4x4
4x4 float matrix
Definition lin.hpp:1076
matrix< std::uint16_t, 2, 2 > ushort2x2
2x2 unsigned short matrix
Definition lin.hpp:626
vector< float, 1 > float1
1D float vector
Definition lin.hpp:241
vector< float, 3 > float3
3D float vector
Definition lin.hpp:251
matrix< double, 3 > double3x4
3x4 double matrix
Definition lin.hpp:1151
vector< double, 2 > double2
2D double vector
Definition lin.hpp:266
matrix< bool, 3, 3 > bool3x3
3x3 boolean matrix
Definition lin.hpp:331
vector< std::int32_t, 1 > int1
1D integer vector
Definition lin.hpp:161
vector< std::uint32_t > uint4
4D unsigned integer vector
Definition lin.hpp:196
matrix< std::int8_t, 4, 2 > char4x2
4x2 char matrix
Definition lin.hpp:396
matrix< double, 3, 2 > double3x2
3x2 double matrix
Definition lin.hpp:1111
matrix< double, 2 > double2x4
2x4 double matrix
Definition lin.hpp:1146
matrix< float, 2, 1 > float2x1
2x1 float matrix
Definition lin.hpp:1006
vector< std::uint8_t, 2 > uchar2
2D unsigned char vector
Definition lin.hpp:106
matrix< std::int32_t, 3, 1 > int3x1
3x1 integer matrix
Definition lin.hpp:691
matrix< std::uint8_t, 4, 2 > uchar4x2
4x2 unsigned char matrix
Definition lin.hpp:476
matrix< std::int32_t, 4, 2 > int4x2
4x2 integer matrix
Definition lin.hpp:716
matrix< std::uint32_t, 3, 2 > uint3x2
3x2 unsigned integer matrix
Definition lin.hpp:791
short3 short1x3
1x3 short matrix
Definition lin.hpp:561
matrix< float, 2, 2 > float2x2
2x2 float matrix
Definition lin.hpp:1026
char4 char1x4
1x4 char matrix
Definition lin.hpp:421
vector< std::uint16_t, 3 > ushort3
3D unsigned short vector
Definition lin.hpp:151
matrix< std::uint64_t, 4, 1 > ulong4x1
4x1 unsigned long matrix
Definition lin.hpp:936
matrix< std::uint8_t > uchar4x4
4x4 unsigned char matrix
Definition lin.hpp:516
matrix< std::int64_t, 3, 1 > long3x1
3x1 long matrix
Definition lin.hpp:851
vector< std::int8_t, 1 > char1
1D char vector
Definition lin.hpp:81
vector< std::uint16_t, 2 > ushort2
2D unsigned short vector
Definition lin.hpp:146
matrix< bool > bool4x4
4x4 boolean matrix
Definition lin.hpp:356
matrix< std::uint16_t, 4, 1 > ushort4x1
4x1 unsigned short matrix
Definition lin.hpp:616
matrix< std::int8_t, 4, 1 > char4x1
4x1 char matrix
Definition lin.hpp:376
matrix< std::int8_t, 2, 2 > char2x2
2x2 char matrix
Definition lin.hpp:386
vector< float, 2 > float2
2D float vector
Definition lin.hpp:246
uchar4 uchar1x4
1x4 unsigned char matrix
Definition lin.hpp:501
vector< std::int8_t, 2 > char2
2D char vector
Definition lin.hpp:86
matrix< std::int32_t, 2, 3 > int2x3
2x3 integer matrix
Definition lin.hpp:726
matrix< double, 4, 1 > double4x1
4x1 double matrix
Definition lin.hpp:1096
matrix< std::int8_t, 3, 2 > char3x2
3x2 char matrix
Definition lin.hpp:391
matrix< bool, 3, 1 > bool3x1
3x1 boolean matrix
Definition lin.hpp:291
matrix< bool, 4, 2 > bool4x2
4x2 boolean matrix
Definition lin.hpp:316
vector< std::uint16_t, 1 > ushort1
1D unsigned short vector
Definition lin.hpp:141
matrix< double, 4, 2 > double4x2
4x2 double matrix
Definition lin.hpp:1116
matrix< std::uint64_t, 3, 1 > ulong3x1
3x1 unsigned long matrix
Definition lin.hpp:931
matrix< float, 4, 2 > float4x2
4x2 float matrix
Definition lin.hpp:1036
internal::matrix< T, M, N > matrix
Generic M*N matrix with per-component operations.
Definition lin.hpp:48
matrix< std::int8_t, 3, 3 > char3x3
3x3 char matrix
Definition lin.hpp:411
vector< double, 3 > double3
3D double vector
Definition lin.hpp:271
matrix< std::int16_t, 3, 3 > short3x3
3x3 short matrix
Definition lin.hpp:571
vector< std::int32_t, 3 > int3
3D integer vector
Definition lin.hpp:171
matrix< std::uint16_t, 2 > ushort2x4
2x4 unsigned short matrix
Definition lin.hpp:666
matrix< std::uint32_t, 4, 3 > uint4x3
4x3 unsigned integer matrix
Definition lin.hpp:816
vector< std::int32_t > int4
4D integer vector
Definition lin.hpp:176
bool1 bool1x1
1x1 boolean matrix
Definition lin.hpp:281
matrix< std::int64_t, 3, 2 > long3x2
3x2 long matrix
Definition lin.hpp:871
matrix< std::int16_t, 3 > short3x4
3x4 short matrix
Definition lin.hpp:591
ulong2 ulong1x2
1x2 unsigned long matrix
Definition lin.hpp:941
matrix< std::uint16_t > ushort4x4
4x4 unsigned short matrix
Definition lin.hpp:676
int3 int1x3
1x3 integer matrix
Definition lin.hpp:721
vector< double, 1 > double1
1D double vector
Definition lin.hpp:261
matrix< std::uint16_t, 3, 3 > ushort3x3
3x3 unsigned short matrix
Definition lin.hpp:651
matrix< std::uint64_t, 2, 2 > ulong2x2
2x2 unsigned long matrix
Definition lin.hpp:946
matrix< std::int16_t, 2, 1 > short2x1
2x1 short matrix
Definition lin.hpp:526
uchar2 uchar1x2
1x2 unsigned char matrix
Definition lin.hpp:461
bool4 bool1x4
1x4 boolean matrix
Definition lin.hpp:341
matrix< std::int32_t, 4, 3 > int4x3
4x3 integer matrix
Definition lin.hpp:736
double4 double1x4
1x4 double matrix
Definition lin.hpp:1141
matrix< std::uint8_t, 3, 2 > uchar3x2
3x2 unsigned char matrix
Definition lin.hpp:471
uint2 uint1x2
1x2 unsigned integer matrix
Definition lin.hpp:781
matrix< bool, 2 > bool2x4
2x4 boolean matrix
Definition lin.hpp:346
matrix< std::uint16_t, 2, 3 > ushort2x3
2x3 unsigned short matrix
Definition lin.hpp:646
vector< std::uint8_t, 1 > uchar1
1D unsigned char vector
Definition lin.hpp:101
matrix< bool, 2, 3 > bool2x3
2x3 boolean matrix
Definition lin.hpp:326
matrix< std::uint32_t, 2, 2 > uint2x2
2x2 unsigned integer matrix
Definition lin.hpp:786
vector< bool, 2 > bool2
2D boolean vector
Definition lin.hpp:66
vector< float > float4
4D float vector
Definition lin.hpp:256
vector< bool, 1 > bool1
1D boolean vector
Definition lin.hpp:61
vector< std::int64_t, 1 > long1
1D long vector
Definition lin.hpp:201
long4 long1x4
1x4 long matrix
Definition lin.hpp:901
matrix< std::int64_t, 2, 1 > long2x1
2x1 long matrix
Definition lin.hpp:846
matrix< std::int64_t, 2, 3 > long2x3
2x3 long matrix
Definition lin.hpp:886
matrix< std::uint32_t, 3, 1 > uint3x1
3x1 unsigned integer matrix
Definition lin.hpp:771
matrix< std::int64_t, 4, 3 > long4x3
4x3 long matrix
Definition lin.hpp:896
matrix< std::int8_t, 3, 1 > char3x1
3x1 char matrix
Definition lin.hpp:371
matrix< std::uint64_t, 2 > ulong2x4
2x4 unsigned long matrix
Definition lin.hpp:986
matrix< std::int64_t, 2, 2 > long2x2
2x2 long matrix
Definition lin.hpp:866
matrix< std::uint64_t, 4, 2 > ulong4x2
4x2 unsigned long matrix
Definition lin.hpp:956
vector< std::int16_t > short4
4D short vector
Definition lin.hpp:136
matrix< std::uint8_t, 3, 1 > uchar3x1
3x1 unsigned char matrix
Definition lin.hpp:451
ushort1 ushort1x1
1x1 unsigned short matrix
Definition lin.hpp:601
matrix< std::uint8_t, 2 > uchar2x4
2x4 unsigned char matrix
Definition lin.hpp:506
matrix< std::uint8_t, 2, 1 > uchar2x1
2x1 unsigned char matrix
Definition lin.hpp:446
matrix< std::uint8_t, 3 > uchar3x4
3x4 unsigned char matrix
Definition lin.hpp:511
matrix< std::int8_t, 4, 3 > char4x3
4x3 char matrix
Definition lin.hpp:416
vector< std::uint8_t, 3 > uchar3
3D unsigned char vector
Definition lin.hpp:111
vector< std::uint32_t, 3 > uint3
3D unsigned integer vector
Definition lin.hpp:191
vector< std::uint32_t, 2 > uint2
2D unsigned integer vector
Definition lin.hpp:186
vector< std::uint64_t, 3 > ulong3
3D unsigned long vector
Definition lin.hpp:231