Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ UpdateDeterminant()

void Microsoft.Xna.Framework.Gjk.UpdateDeterminant ( int xmIdx)
inlineprivate

Definition at line 91 of file Gjk.cs.

92 {
93 int num = 1 << xmIdx;
94 det[num][xmIdx] = 1f;
95 int num2 = BitsToIndices[simplexBits];
96 int num3 = num2;
97 int num4 = 0;
98 while (num3 != 0)
99 {
100 int num5 = (num3 & 7) - 1;
101 int num6 = 1 << num5;
102 int num7 = num6 | num;
103 det[num7][num5] = Dot(ref edges[xmIdx][num5], ref y[xmIdx]);
104 det[num7][xmIdx] = Dot(ref edges[num5][xmIdx], ref y[num5]);
105 int num8 = num2;
106 for (int i = 0; i < num4; i++)
107 {
108 int num9 = (num8 & 7) - 1;
109 int num10 = 1 << num9;
110 int num11 = num7 | num10;
111 int num12 = ((edgeLengthSq[num5][num9] < edgeLengthSq[xmIdx][num9]) ? num5 : xmIdx);
112 det[num11][num9] = det[num7][num5] * Dot(ref edges[num12][num9], ref y[num5]) + det[num7][xmIdx] * Dot(ref edges[num12][num9], ref y[xmIdx]);
113 num12 = ((edgeLengthSq[num9][num5] < edgeLengthSq[xmIdx][num5]) ? num9 : xmIdx);
114 det[num11][num5] = det[num10 | num][num9] * Dot(ref edges[num12][num5], ref y[num9]) + det[num10 | num][xmIdx] * Dot(ref edges[num12][num5], ref y[xmIdx]);
115 num12 = ((edgeLengthSq[num5][xmIdx] < edgeLengthSq[num9][xmIdx]) ? num5 : num9);
116 det[num11][xmIdx] = det[num6 | num10][num9] * Dot(ref edges[num12][xmIdx], ref y[num9]) + det[num6 | num10][num5] * Dot(ref edges[num12][xmIdx], ref y[num5]);
117 num8 >>= 3;
118 }
119 num3 >>= 3;
120 num4++;
121 }
122 if ((simplexBits | num) == 15)
123 {
124 int num13 = ((!(edgeLengthSq[1][0] < edgeLengthSq[2][0])) ? ((edgeLengthSq[2][0] < edgeLengthSq[3][0]) ? 2 : 3) : ((edgeLengthSq[1][0] < edgeLengthSq[3][0]) ? 1 : 3));
125 det[15][0] = det[14][1] * Dot(ref edges[num13][0], ref y[1]) + det[14][2] * Dot(ref edges[num13][0], ref y[2]) + det[14][3] * Dot(ref edges[num13][0], ref y[3]);
126 num13 = ((!(edgeLengthSq[0][1] < edgeLengthSq[2][1])) ? ((edgeLengthSq[2][1] < edgeLengthSq[3][1]) ? 2 : 3) : ((!(edgeLengthSq[0][1] < edgeLengthSq[3][1])) ? 3 : 0));
127 det[15][1] = det[13][0] * Dot(ref edges[num13][1], ref y[0]) + det[13][2] * Dot(ref edges[num13][1], ref y[2]) + det[13][3] * Dot(ref edges[num13][1], ref y[3]);
128 num13 = ((!(edgeLengthSq[0][2] < edgeLengthSq[1][2])) ? ((edgeLengthSq[1][2] < edgeLengthSq[3][2]) ? 1 : 3) : ((!(edgeLengthSq[0][2] < edgeLengthSq[3][2])) ? 3 : 0));
129 det[15][2] = det[11][0] * Dot(ref edges[num13][2], ref y[0]) + det[11][1] * Dot(ref edges[num13][2], ref y[1]) + det[11][3] * Dot(ref edges[num13][2], ref y[3]);
130 num13 = ((!(edgeLengthSq[0][3] < edgeLengthSq[1][3])) ? ((edgeLengthSq[1][3] < edgeLengthSq[2][3]) ? 1 : 2) : ((!(edgeLengthSq[0][3] < edgeLengthSq[2][3])) ? 2 : 0));
131 det[15][3] = det[7][0] * Dot(ref edges[num13][3], ref y[0]) + det[7][1] * Dot(ref edges[num13][3], ref y[1]) + det[7][2] * Dot(ref edges[num13][3], ref y[2]);
132 }
133 }
static float Dot(ref Vector3 a, ref Vector3 b)
Definition Gjk.cs:86
Vector3[][] edges
Definition Gjk.cs:20
float[][] edgeLengthSq
Definition Gjk.cs:22
static int[] BitsToIndices
Definition Gjk.cs:8

References Microsoft.Xna.Framework.Gjk.BitsToIndices, Microsoft.Xna.Framework.Gjk.det, Microsoft.Xna.Framework.Gjk.Dot(), Microsoft.Xna.Framework.Gjk.edgeLengthSq, Microsoft.Xna.Framework.Gjk.edges, Microsoft.Xna.Framework.Gjk.simplexBits, and Microsoft.Xna.Framework.Gjk.y.

Referenced by Microsoft.Xna.Framework.Gjk.AddSupportPoint().