nalgebra_glm/gtc/
constants.rs

1use crate::RealNumber;
2
3/// The Euler constant.
4///
5/// This is a shorthand alias for [`euler()`].
6pub fn e<T: RealNumber>() -> T {
7    T::e()
8}
9
10/// The Euler constant.
11pub fn euler<T: RealNumber>() -> T {
12    T::e()
13}
14
15/// Returns `4 / pi`.
16///
17/// # See also:
18///
19/// * [`half_pi()`]
20/// * [`one_over_pi()`]
21/// * [`one_over_two_pi()`]
22/// * [`pi()`](crate::pi)
23/// * [`quarter_pi()`]
24/// * [`root_half_pi()`]
25/// * [`root_pi()`]
26/// * [`root_two_pi()`]
27/// * [`three_over_two_pi()`]
28/// * [`two_over_pi()`]
29/// * [`two_over_root_pi()`]
30/// * [`two_pi()`]
31pub fn four_over_pi<T: RealNumber>() -> T {
32    na::convert::<_, T>(4.0) / T::pi()
33}
34
35/// Returns the golden ratio.
36pub fn golden_ratio<T: RealNumber>() -> T {
37    (T::one() + root_five()) / na::convert(2.0)
38}
39
40/// Returns `pi / 2`.
41///
42/// # See also:
43///
44/// * [`four_over_pi()`]
45/// * [`one_over_pi()`]
46/// * [`one_over_two_pi()`]
47/// * [`pi()`](crate::pi)
48/// * [`quarter_pi()`]
49/// * [`root_half_pi()`]
50/// * [`root_pi()`]
51/// * [`root_two_pi()`]
52/// * [`three_over_two_pi()`]
53/// * [`two_over_pi()`]
54/// * [`two_over_root_pi()`]
55/// * [`two_pi()`]
56pub fn half_pi<T: RealNumber>() -> T {
57    T::frac_pi_2()
58}
59
60/// Returns `ln(ln(2))`.
61///
62/// # See also:
63///
64/// * [`ln_ten()`]
65/// * [`ln_two()`]
66pub fn ln_ln_two<T: RealNumber>() -> T {
67    T::ln_2().ln()
68}
69
70/// Returns `ln(10)`.
71///
72/// # See also:
73///
74/// * [`ln_ln_two()`]
75/// * [`ln_two()`]
76pub fn ln_ten<T: RealNumber>() -> T {
77    T::ln_10()
78}
79
80/// Returns `ln(2)`.
81///
82/// # See also:
83///
84/// * [`ln_ln_two()`]
85/// * [`ln_ten()`]
86pub fn ln_two<T: RealNumber>() -> T {
87    T::ln_2()
88}
89
90/// Returns `1`.
91pub use na::one;
92
93/// Returns `1 / pi`.
94///
95/// # See also:
96///
97/// * [`four_over_pi()`]
98/// * [`half_pi()`]
99/// * [`one_over_two_pi()`]
100/// * [`pi()`](crate::pi)
101/// * [`quarter_pi()`]
102/// * [`root_half_pi()`]
103/// * [`root_pi()`]
104/// * [`root_two_pi()`]
105/// * [`three_over_two_pi()`]
106/// * [`two_over_pi()`]
107/// * [`two_over_root_pi()`]
108/// * [`two_pi()`]
109pub fn one_over_pi<T: RealNumber>() -> T {
110    T::frac_1_pi()
111}
112
113/// Returns `1 / sqrt(2)`.
114pub fn one_over_root_two<T: RealNumber>() -> T {
115    T::one() / root_two()
116}
117
118/// Returns `1 / (2pi)`.
119///
120/// # See also:
121///
122/// * [`four_over_pi()`]
123/// * [`half_pi()`]
124/// * [`one_over_pi()`]
125/// * [`pi()`](crate::pi)
126/// * [`quarter_pi()`]
127/// * [`root_half_pi()`]
128/// * [`root_pi()`]
129/// * [`root_two_pi()`]
130/// * [`three_over_two_pi()`]
131/// * [`two_over_pi()`]
132/// * [`two_over_root_pi()`]
133/// * [`two_pi()`]
134pub fn one_over_two_pi<T: RealNumber>() -> T {
135    T::frac_1_pi() * na::convert(0.5)
136}
137
138/// Returns `pi / 4`.
139///
140/// # See also:
141///
142/// * [`four_over_pi()`]
143/// * [`half_pi()`]
144/// * [`one_over_pi()`]
145/// * [`one_over_two_pi()`]
146/// * [`pi()`](crate::pi)
147/// * [`root_half_pi()`]
148/// * [`root_pi()`]
149/// * [`root_two_pi()`]
150/// * [`three_over_two_pi()`]
151/// * [`two_over_pi()`]
152/// * [`two_over_root_pi()`]
153/// * [`two_pi()`]
154pub fn quarter_pi<T: RealNumber>() -> T {
155    T::frac_pi_4()
156}
157
158/// Returns `sqrt(5)`.
159///
160/// # See also:
161///
162/// * [`root_three()`]
163/// * [`root_two()`]
164pub fn root_five<T: RealNumber>() -> T {
165    na::convert::<_, T>(5.0).sqrt()
166}
167
168/// Returns `sqrt(pi / 2)`.
169///
170/// # See also:
171///
172/// * [`four_over_pi()`]
173/// * [`half_pi()`]
174/// * [`one_over_pi()`]
175/// * [`one_over_two_pi()`]
176/// * [`pi()`](crate::pi)
177/// * [`quarter_pi()`]
178/// * [`root_pi()`]
179/// * [`root_two_pi()`]
180/// * [`three_over_two_pi()`]
181/// * [`two_over_pi()`]
182/// * [`two_over_root_pi()`]
183/// * [`two_pi()`]
184pub fn root_half_pi<T: RealNumber>() -> T {
185    (T::pi() / na::convert(2.0)).sqrt()
186}
187
188/// Returns `sqrt(ln(4))`.
189pub fn root_ln_four<T: RealNumber>() -> T {
190    na::convert::<_, T>(4.0).ln().sqrt()
191}
192
193/// Returns the square root of pi.
194///
195/// # See also:
196///
197/// * [`four_over_pi()`]
198/// * [`half_pi()`]
199/// * [`one_over_pi()`]
200/// * [`one_over_two_pi()`]
201/// * [`pi()`](crate::pi)
202/// * [`quarter_pi()`]
203/// * [`root_half_pi()`]
204/// * [`root_two_pi()`]
205/// * [`three_over_two_pi()`]
206/// * [`two_over_pi()`]
207/// * [`two_over_root_pi()`]
208/// * [`two_pi()`]
209pub fn root_pi<T: RealNumber>() -> T {
210    T::pi().sqrt()
211}
212
213/// Returns the square root of 3.
214///
215/// # See also:
216///
217/// * [`root_five()`]
218/// * [`root_two()`]
219pub fn root_three<T: RealNumber>() -> T {
220    na::convert::<_, T>(3.0).sqrt()
221}
222
223/// Returns the square root of 2.
224///
225/// # See also:
226///
227/// * [`root_five()`]
228/// * [`root_three()`]
229pub fn root_two<T: RealNumber>() -> T {
230    // TODO: there should be a crate::sqrt_2() on the RealNumber trait.
231    na::convert::<_, T>(2.0).sqrt()
232}
233
234/// Returns the square root of 2pi.
235///
236/// # See also:
237///
238/// * [`four_over_pi()`]
239/// * [`half_pi()`]
240/// * [`one_over_pi()`]
241/// * [`one_over_two_pi()`]
242/// * [`pi()`](crate::pi)
243/// * [`quarter_pi()`]
244/// * [`root_half_pi()`]
245/// * [`root_pi()`]
246/// * [`three_over_two_pi()`]
247/// * [`two_over_pi()`]
248/// * [`two_over_root_pi()`]
249/// * [`two_pi()`]
250pub fn root_two_pi<T: RealNumber>() -> T {
251    T::two_pi().sqrt()
252}
253
254/// Returns `1 / 3`.
255///
256/// # See also:
257///
258/// * [`two_thirds()`]
259pub fn third<T: RealNumber>() -> T {
260    na::convert(1.0 / 3.0)
261}
262
263/// Returns `3 / (2pi)`.
264///
265/// # See also:
266///
267/// * [`four_over_pi()`]
268/// * [`half_pi()`]
269/// * [`one_over_pi()`]
270/// * [`one_over_two_pi()`]
271/// * [`pi()`](crate::pi)
272/// * [`quarter_pi()`]
273/// * [`root_half_pi()`]
274/// * [`root_pi()`]
275/// * [`root_two_pi()`]
276/// * [`two_over_pi()`]
277/// * [`two_over_root_pi()`]
278/// * [`two_pi()`]
279pub fn three_over_two_pi<T: RealNumber>() -> T {
280    na::convert::<_, T>(3.0) / T::two_pi()
281}
282
283/// Returns `2 / pi`.
284///
285/// # See also:
286///
287/// * [`four_over_pi()`]
288/// * [`half_pi()`]
289/// * [`one_over_pi()`]
290/// * [`one_over_two_pi()`]
291/// * [`pi()`](crate::pi)
292/// * [`quarter_pi()`]
293/// * [`root_half_pi()`]
294/// * [`root_pi()`]
295/// * [`root_two_pi()`]
296/// * [`three_over_two_pi()`]
297/// * [`two_over_root_pi()`]
298/// * [`two_pi()`]
299pub fn two_over_pi<T: RealNumber>() -> T {
300    T::frac_2_pi()
301}
302
303/// Returns `2 / sqrt(pi)`.
304///
305/// # See also:
306///
307/// * [`four_over_pi()`]
308/// * [`half_pi()`]
309/// * [`one_over_pi()`]
310/// * [`one_over_two_pi()`]
311/// * [`pi()`](crate::pi)
312/// * [`quarter_pi()`]
313/// * [`root_half_pi()`]
314/// * [`root_pi()`]
315/// * [`root_two_pi()`]
316/// * [`three_over_two_pi()`]
317/// * [`two_over_pi()`]
318/// * [`two_pi()`]
319pub fn two_over_root_pi<T: RealNumber>() -> T {
320    T::frac_2_sqrt_pi()
321}
322
323/// Returns `2pi`.
324///
325/// # See also:
326///
327/// * [`four_over_pi()`]
328/// * [`half_pi()`]
329/// * [`one_over_pi()`]
330/// * [`one_over_two_pi()`]
331/// * [`pi()`](crate::pi)
332/// * [`quarter_pi()`]
333/// * [`root_half_pi()`]
334/// * [`root_pi()`]
335/// * [`root_two_pi()`]
336/// * [`three_over_two_pi()`]
337/// * [`two_over_pi()`]
338/// * [`two_over_root_pi()`]
339pub fn two_pi<T: RealNumber>() -> T {
340    T::two_pi()
341}
342
343/// Returns `2 / 3`.
344///
345/// # See also:
346///
347/// * [`third()`]
348pub fn two_thirds<T: RealNumber>() -> T {
349    na::convert(2.0 / 3.0)
350}
351
352/// Returns `0`.
353pub use na::zero;