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

◆ CreateFromPoints()

static BoundingSphere Microsoft.Xna.Framework.BoundingSphere.CreateFromPoints ( IEnumerable< Vector3 > points)
inlinestatic

Definition at line 134 of file BoundingSphere.cs.

135 {
136 if (points == null)
137 {
138 throw new ArgumentNullException("points");
139 }
141 if (!enumerator.MoveNext())
142 {
143 throw new ArgumentException(FrameworkResources.BoundingSphereZeroPoints);
144 }
150 Vector3 value6 = (value5 = (value4 = (value3 = (value2 = (value = enumerator.Current)))));
151 foreach (Vector3 point in points)
152 {
153 if (point.X < value6.X)
154 {
155 value6 = point;
156 }
157 if (point.X > value5.X)
158 {
159 value5 = point;
160 }
161 if (point.Y < value4.Y)
162 {
163 value4 = point;
164 }
165 if (point.Y > value3.Y)
166 {
167 value3 = point;
168 }
169 if (point.Z < value2.Z)
170 {
171 value2 = point;
172 }
173 if (point.Z > value.Z)
174 {
175 value = point;
176 }
177 }
178 Vector3.Distance(ref value5, ref value6, out var result);
180 Vector3.Distance(ref value, ref value2, out var result3);
182 float num;
183 if (result > result2)
184 {
185 if (result > result3)
186 {
187 Vector3.Lerp(ref value5, ref value6, 0.5f, out result4);
188 num = result * 0.5f;
189 }
190 else
191 {
192 Vector3.Lerp(ref value, ref value2, 0.5f, out result4);
193 num = result3 * 0.5f;
194 }
195 }
196 else if (result2 > result3)
197 {
198 Vector3.Lerp(ref value3, ref value4, 0.5f, out result4);
199 num = result2 * 0.5f;
200 }
201 else
202 {
203 Vector3.Lerp(ref value, ref value2, 0.5f, out result4);
204 num = result3 * 0.5f;
205 }
206 Vector3 vector = default(Vector3);
207 foreach (Vector3 point2 in points)
208 {
209 vector.X = point2.X - result4.X;
210 vector.Y = point2.Y - result4.Y;
211 vector.Z = point2.Z - result4.Z;
212 float num2 = vector.Length();
213 if (num2 > num)
214 {
215 num = (num + num2) * 0.5f;
216 result4 += (1f - num / num2) * vector;
217 }
218 }
220 result5.Center = result4;
221 result5.Radius = num;
222 return result5;
223 }
BoundingSphere(Vector3 center, float radius)

References Microsoft.Xna.Framework.FrameworkResources.BoundingSphereZeroPoints, Microsoft.Xna.Framework.Vector3.Distance(), System.Collections.Generic.Dictionary< TKey, TValue >.GetEnumerator(), Microsoft.Xna.Framework.Vector3.Lerp(), System.value, Microsoft.Xna.Framework.Vector3.X, Microsoft.Xna.Framework.Vector3.Y, and Microsoft.Xna.Framework.Vector3.Z.

Referenced by Microsoft.Xna.Framework.BoundingSphere.CreateFromFrustum().