MCPcopy Create free account
hub / github.com/bfbbdecomp/bfbb / Tridiag_Solve

Function Tridiag_Solve

src/SB/Core/x/xSpline.cpp:14–96  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

12static F32 sBasisHermite[4][4];
13
14void Tridiag_Solve(F32* a, F32* b, F32* c, xVec3* d, xVec3* x, S32 n)
15{
16 S32 j;
17
18 F32* a_temp;
19 F32* b_temp;
20 F32* c_temp;
21 xVec3* delta;
22
23 S32 vec_offset;
24 F32 beta;
25 F32* gamma;
26
27 F32* c_prime;
28 F32* d_prime;
29
30 c_prime = (F32*)RwMalloc(n << 2);
31 d_prime = (F32*)RwMalloc(n * 0xC);
32
33 c_prime[0] = *c / *b;
34
35 d_prime[0] = d->x / *b;
36 d_prime[1] = d->y / *b;
37 d_prime[2] = d->z / *b;
38
39 a_temp = a + 1;
40 b_temp = b + 1;
41 c_temp = c + 1;
42 delta = d + 1;
43 vec_offset = 0xC;
44
45 if (n > 1)
46 {
47 for (j = 1; j < n; j += 1)
48 {
49 beta = b_temp[0];
50 gamma = (F32*)((S32)d_prime + vec_offset - 0xc);
51 vec_offset = vec_offset + 0xC;
52 b_temp = b_temp + 1;
53 c_temp = c_temp + 1;
54 *b_temp = *b_temp - *a_temp * c_prime[0];
55 c_prime[1] = *c_temp / beta;
56 d_prime[3] = (delta->x - *a_temp * gamma[0]) / beta;
57 d_prime[4] = (delta->y - *a_temp * gamma[1]) / beta;
58 *c_temp = *a_temp;
59 a_temp = a_temp + 1;
60 delta = delta + 1;
61 d_prime[5] = (*(&delta->z) - *c_temp * gamma[2]) / beta;
62 c_prime = c_prime + 1;
63 d_prime = d_prime + 3;
64 }
65 }
66
67 j = n - 2;
68 c_prime = d_prime + (n - 1) * 3;
69 delta->x = c_prime[0];
70 delta->y = c_prime[1];
71 delta->z = c_prime[2];

Callers 1

Interpolate_BsplineFunction · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected