10 if (pointsToFit.empty()) {
11 sphere.
center = glm::vec3(0.0f);
19 glm::vec3 minX, maxX, minY, maxY, minZ, maxZ;
20 minX = maxX = minY = maxY = minZ = maxZ = pointsToFit[0];
22 for (
const auto& point : pointsToFit) {
23 if (point.x < minX.x) minX = point;
24 if (point.x > maxX.x) maxX = point;
25 if (point.y < minY.y) minY = point;
26 if (point.y > maxY.y) maxY = point;
27 if (point.z < minZ.z) minZ = point;
28 if (point.z > maxZ.z) maxZ = point;
31 float distX = glm::distance2(minX, maxX);
32 float distY = glm::distance2(minY, maxY);
33 float distZ = glm::distance2(minZ, maxZ);
36 if (distX > distY && distX > distZ) {
39 }
else if (distY > distZ) {
48 glm::vec3 center = (p1 + p2) * 0.5f;
49 float radius = glm::distance(center, p2);
56 float maxDistSq = 0.0f;
57 glm::vec3 farthestPoint = center;
59 for (
const auto& point : pointsToFit) {
60 glm::vec3 diff = point - center;
61 float distSq = glm::dot(diff, diff);
63 if (distSq > maxDistSq) {
65 farthestPoint = point;
70 if (maxDistSq > radius * radius) {
71 float dist = glm::sqrt(maxDistSq);
72 float newRadius = (radius + dist) * 0.5f;
73 center += (farthestPoint - center) * ((dist - radius) / dist);
78 for (
const auto& point : pointsToFit) {
79 glm::vec3 diff = point - center;
80 float distSq = glm::dot(diff, diff);
82 if (distSq > maxDistSq) {
84 farthestPoint = point;
88 if (maxDistSq > radius * radius) {
89 float dist = glm::sqrt(maxDistSq);
90 float newRadius = (radius + dist) * 0.5f;
91 center += (farthestPoint - center) * ((dist - radius) / dist);