gpt4 book ai didi

algorithm - 封装 3D 三角形的最小球体?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:03:54 25 4
gpt4 key购买 nike

起初我想你将顶点相加并按 1/3 缩放以找到原点,然后取从顶点到原点的最大距离。这会产生一个包含三角形的球体,但它不一定是最小的。

是否有已知的方法来确定最小球体以完全封装 3D 中的任意三角形?

最佳答案

使用这里的答案和维基百科在 c++ 中提出了一些对我有用的东西,我希望这对某人有帮助!

  static Sphere makeMinimumBoundingSphere(const Vec3 &p1, const Vec3 &p2, const Vec3 &p3) {
Sphere s;
// Calculate relative distances
float A = (p1 - p2).distance();
float B = (p2 - p3).distance();
float C = (p3 - p1).distance();

// Re-orient triangle (make A longest side)
const Vec3 *a = &p3, *b = &p1, *c = &p2;
if (B < C) swap(B, C), swap(b, c);
if (A < B) swap(A, B), swap(a, b);

// If obtuse, just use longest diameter, otherwise circumscribe
if ((B*B) + (C*C) <= (A*A)) {
s.radius = A / 2.f;
s.position = (*b + *c) / 2.f;
} else {
// http://en.wikipedia.org/wiki/Circumscribed_circle
precision cos_a = (B*B + C*C - A*A) / (B*C*2);
s.radius = A / (sqrt(1 - cos_a*cos_a)*2.f);
Vec3 alpha = *a - *c, beta = *b - *c;
s.position = (beta * alpha.dot(alpha) - alpha * beta.dot(beta)).cross(alpha.cross(beta)) /
(alpha.cross(beta).dot(alpha.cross(beta)) * 2.f) + *c;
}
return s;
}

关于algorithm - 封装 3D 三角形的最小球体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8947151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com