1use crate::prelude::*;
2
3#[inline(always)]
4pub fn cross(a: &F3, b: &F3) -> F3 {
5 a.cross(b)
6}
7
8#[inline(always)]
9pub fn dot(a: &F3, b: &F3) -> F {
10 a.dot(b)
11}
12
13#[inline(always)]
14pub fn normalize(a: & F3) -> F3 {
15 a.normalize()
16}
17
18#[inline(always)]
19pub fn floor(a: & F3) -> F3 {
20 a.floor()
21}
22
23#[inline(always)]
24pub fn fract(a: & F3) -> F3 {
25 a.fract()
26}
27
28#[inline(always)]
29pub fn length(a: & F3) -> F {
30 a.length()
31}
32
33#[inline(always)]
34pub fn mix(a: &F3, b: &F3, v: &F) -> F3 {
35 F3::new(
36 (1.0 - v) * a.x + b.x * v,
37 (1.0 - v) * a.y + b.y * v,
38 (1.0 - v) * a.z + b.z * v
39 )
40}
41
42#[inline(always)]
43pub fn mix_f(a: &F, b: &F, v: &F) -> F {
44 (1.0 - v) * a + b * v
45}
46
47#[inline(always)]
48pub fn smoothstep(e0: F, e1: F, x: F) -> F {
49 let t = ((x - e0) / (e1 - e0)). clamp(0.0, 1.0);
50 return t * t * (3.0 - 2.0 * t);
51}
52
53#[inline(always)]
54pub fn pow(a: &F3, exp: &F3) -> F3 {
55 F3::new(
56 a.x.powf(exp.x),
57 a.y.powf(exp.y),
58 a.z.powf(exp.z),
59 )
60}
61
62#[inline(always)]
63pub fn min(x: F, y: F) -> F {
64 if x < y {
65 x
66 } else {
67 y
68 }
69}
70
71#[inline(always)]
72pub fn max(x: F, y: F) -> F {
73 if x > y {
74 x
75 } else {
76 y
77 }
78}