123 Vector3 xmin(Position[0].X,Position[0].Y,Position[0].Z);
124 Vector3 xmax(Position[0].X,Position[0].Y,Position[0].Z);
125 Vector3 ymin(Position[0].X,Position[0].Y,Position[0].Z);
126 Vector3 ymax(Position[0].X,Position[0].Y,Position[0].Z);
127 Vector3 zmin(Position[0].X,Position[0].Y,Position[0].Z);
128 Vector3 zmax(Position[0].X,Position[0].Y,Position[0].Z);
133 for (i=1; i<VertCount; i++) {
134 if (Position[i].X < xmin.
X) {
135 xmin.
X = Position[i].
X; xmin.
Y = Position[i].
Y; xmin.
Z = Position[i].
Z;
137 if (Position[i].X > xmax.
X) {
138 xmax.
X = Position[i].
X; xmax.
Y = Position[i].
Y; xmax.
Z = Position[i].
Z;
140 if (Position[i].Y < ymin.
Y) {
141 ymin.
X = Position[i].
X; ymin.
Y = Position[i].
Y; ymin.
Z = Position[i].
Z;
143 if (Position[i].Y > ymax.
Y) {
144 ymax.
X = Position[i].
X; ymax.
Y = Position[i].
Y; ymax.
Z = Position[i].
Z;
146 if (Position[i].Z < zmin.
Z) {
147 zmin.
X = Position[i].
X; zmin.
Y = Position[i].
Y; zmin.
Z = Position[i].
Z;
149 if (Position[i].Z > zmax.
Z) {
150 zmax.
X = Position[i].
X; zmax.
Y = Position[i].
Y; zmax.
Z = Position[i].
Z;
156 dx = xmax.
X - xmin.
X;
157 dy = xmax.
Y - xmin.
Y;
158 dz = xmax.
Z - xmin.
Z;
159 double xspan = dx*dx + dy*dy + dz*dz;
161 dx = ymax.
X - ymin.
X;
162 dy = ymax.
Y - ymin.
Y;
163 dz = ymax.
Z - ymin.
Z;
164 double yspan = dx*dx + dy*dy + dz*dz;
166 dx = zmax.
X - zmin.
X;
167 dy = zmax.
Y - zmin.
Y;
168 dz = zmax.
Z - zmin.
Z;
169 double zspan = dx*dx + dy*dy + dz*dz;
176 double maxspan = xspan;
178 if (yspan > maxspan) {
183 if (zspan > maxspan) {
192 center.
X = (dia1.
X + dia2.
X) / 2.0f;
193 center.
Y = (dia1.
Y + dia2.
Y) / 2.0f;
194 center.
Z = (dia1.
Z + dia2.
Z) / 2.0f;
196 dx = dia2.
X - center.
X;
197 dy = dia2.
Y - center.
Y;
198 dz = dia2.
Z - center.
Z;
200 double radsqr = dx*dx + dy*dy + dz*dz;
201 double radius = sqrt(radsqr);
206 for (i=0; i<VertCount; i++) {
208 dx = Position[i].
X - center.
X;
209 dy = Position[i].
Y - center.
Y;
210 dz = Position[i].
Z - center.
Z;
212 double testrad2 = dx*dx + dy*dy + dz*dz;
214 if (testrad2 > radsqr) {
218 double testrad = sqrt(testrad2);
221 radius = (radius + testrad) / 2.0;
222 radsqr = radius * radius;
224 double oldtonew = testrad - radius;
225 center.
X = (radius * center.
X + oldtonew * Position[i].
X) / testrad;
226 center.
Y = (radius * center.
Y + oldtonew * Position[i].
Y) / testrad;
227 center.
Z = (radius * center.
Z + oldtonew * Position[i].
Z) / testrad;