nalgebra_glm/gtx/
matrix_operation.rs

1use crate::aliases::{
2    TMat2, TMat2x3, TMat2x4, TMat3, TMat3x2, TMat3x4, TMat4, TMat4x2, TMat4x3, TVec2, TVec3, TVec4,
3};
4use crate::traits::Number;
5
6/// Builds a 2x2 diagonal matrix.
7///
8/// # See also:
9///
10/// * [`diagonal2x3()`]
11/// * [`diagonal2x4()`]
12/// * [`diagonal3x2()`]
13/// * [`diagonal3x3()`]
14/// * [`diagonal3x4()`]
15/// * [`diagonal4x2()`]
16/// * [`diagonal4x3()`]
17/// * [`diagonal4x4()`]
18pub fn diagonal2x2<T: Number>(v: &TVec2<T>) -> TMat2<T> {
19    TMat2::from_diagonal(v)
20}
21
22/// Builds a 2x3 diagonal matrix.
23///
24/// # See also:
25///
26/// * [`diagonal2x2()`]
27/// * [`diagonal2x4()`]
28/// * [`diagonal3x2()`]
29/// * [`diagonal3x3()`]
30/// * [`diagonal3x4()`]
31/// * [`diagonal4x2()`]
32/// * [`diagonal4x3()`]
33/// * [`diagonal4x4()`]
34pub fn diagonal2x3<T: Number>(v: &TVec2<T>) -> TMat2x3<T> {
35    TMat2x3::from_partial_diagonal(v.as_slice())
36}
37
38/// Builds a 2x4 diagonal matrix.
39///
40/// # See also:
41///
42/// * [`diagonal2x2()`]
43/// * [`diagonal2x3()`]
44/// * [`diagonal3x2()`]
45/// * [`diagonal3x3()`]
46/// * [`diagonal3x4()`]
47/// * [`diagonal4x2()`]
48/// * [`diagonal4x3()`]
49/// * [`diagonal4x4()`]
50pub fn diagonal2x4<T: Number>(v: &TVec2<T>) -> TMat2x4<T> {
51    TMat2x4::from_partial_diagonal(v.as_slice())
52}
53
54/// Builds a 3x2 diagonal matrix.
55///
56/// # See also:
57///
58/// * [`diagonal2x2()`]
59/// * [`diagonal2x3()`]
60/// * [`diagonal2x4()`]
61/// * [`diagonal3x3()`]
62/// * [`diagonal3x4()`]
63/// * [`diagonal4x2()`]
64/// * [`diagonal4x3()`]
65/// * [`diagonal4x4()`]
66pub fn diagonal3x2<T: Number>(v: &TVec2<T>) -> TMat3x2<T> {
67    TMat3x2::from_partial_diagonal(v.as_slice())
68}
69
70/// Builds a 3x3 diagonal matrix.
71///
72/// # See also:
73///
74/// * [`diagonal2x2()`]
75/// * [`diagonal2x3()`]
76/// * [`diagonal2x4()`]
77/// * [`diagonal3x2()`]
78/// * [`diagonal3x4()`]
79/// * [`diagonal4x2()`]
80/// * [`diagonal4x3()`]
81/// * [`diagonal4x4()`]
82pub fn diagonal3x3<T: Number>(v: &TVec3<T>) -> TMat3<T> {
83    TMat3::from_diagonal(v)
84}
85
86/// Builds a 3x4 diagonal matrix.
87///
88/// # See also:
89///
90/// * [`diagonal2x2()`]
91/// * [`diagonal2x3()`]
92/// * [`diagonal2x4()`]
93/// * [`diagonal3x2()`]
94/// * [`diagonal3x3()`]
95/// * [`diagonal4x2()`]
96/// * [`diagonal4x3()`]
97/// * [`diagonal4x4()`]
98pub fn diagonal3x4<T: Number>(v: &TVec3<T>) -> TMat3x4<T> {
99    TMat3x4::from_partial_diagonal(v.as_slice())
100}
101
102/// Builds a 4x2 diagonal matrix.
103///
104/// # See also:
105///
106/// * [`diagonal2x2()`]
107/// * [`diagonal2x3()`]
108/// * [`diagonal2x4()`]
109/// * [`diagonal3x2()`]
110/// * [`diagonal3x3()`]
111/// * [`diagonal3x4()`]
112/// * [`diagonal4x3()`]
113/// * [`diagonal4x4()`]
114pub fn diagonal4x2<T: Number>(v: &TVec2<T>) -> TMat4x2<T> {
115    TMat4x2::from_partial_diagonal(v.as_slice())
116}
117
118/// Builds a 4x3 diagonal matrix.
119///
120/// # See also:
121///
122/// * [`diagonal2x2()`]
123/// * [`diagonal2x3()`]
124/// * [`diagonal2x4()`]
125/// * [`diagonal3x2()`]
126/// * [`diagonal3x3()`]
127/// * [`diagonal3x4()`]
128/// * [`diagonal4x2()`]
129/// * [`diagonal4x4()`]
130pub fn diagonal4x3<T: Number>(v: &TVec3<T>) -> TMat4x3<T> {
131    TMat4x3::from_partial_diagonal(v.as_slice())
132}
133
134/// Builds a 4x4 diagonal matrix.
135///
136/// # See also:
137///
138/// * [`diagonal2x2()`]
139/// * [`diagonal2x3()`]
140/// * [`diagonal2x4()`]
141/// * [`diagonal3x2()`]
142/// * [`diagonal3x3()`]
143/// * [`diagonal3x4()`]
144/// * [`diagonal4x2()`]
145/// * [`diagonal4x3()`]
146pub fn diagonal4x4<T: Number>(v: &TVec4<T>) -> TMat4<T> {
147    TMat4::from_diagonal(v)
148}