【发布时间】:2016-09-21 15:22:56
【问题描述】:
我一直在努力寻找一个用于 Javascript 的凸包库,它提供与 Matlab convhulln 函数相同的输出。
我正在将一些代码从 Matlab 转录到 Javascript,我需要找到构成一组顶点的凸包的三角形。 Matlab 使用 convhulln(利用 qhull 函数)计算一些 3D 点的凸包。在这种情况下,当我将相同的顶点传递给每个顶点时,Matlab convhulln 输出一组与 quickhull3d 不同的三角形面。有些面孔重合,但通常大多数不重合。它们唯一的相似之处是它们都输出相同数量的面(尽管面的实际顶点并不相同)。
http://www.mathworks.com/help/matlab/ref/convhulln.html
在 Javascript 中,我尝试了不同的库,每个库都给出不同的输出..
从 npm 我试过了:
quickhull3d - https://github.com/maurizzzio/quickhull3d
convex-hull
delaunay-triangulate
大多数其他算法都是为 2D 点设计的,所以我排除了它们。
任何想法、提示或反馈将不胜感激!谢谢!
这是我正在使用的顶点以及 MATlab 的 convhulln 和 quickhull3d 的结果。请注意,我使用排序算法从第一个顶点到最后一个顶点对它们进行排序。这不应该影响实际的三角形面,因为我在 MATlab 和 JS 代码中以完全相同的方式对它们进行排序。
这是两个船体的图。
注意孔。我已经与 quickhull3d 算法的开发人员交谈过(感谢您的回复!!),他建议可能是他使用的三角测量过程与 matlab 使用的不同。
vertices = [
[ 0.9510565162951535, -0.3090169943749474, 0 ],
[ 0.5877852522924731, -0.8090169943749475, 0 ],
[ 6.123233995736766e-17, -1, 0 ],
[ -0.5591929034707466, 0.8290375725550418, 0 ],
[ -0.9510565162951535, -0.3090169943749475, 0 ],
[ -0.9510565162951536, 0.3090169943749473, 0 ],
[ -0.5877852522924732, 0.8090169943749473, 0 ],
[ -1.8369701987210297e-16, 1, 0 ],
[ 0.5877852522924729, 0.8090169943749476, 0 ],
[ 0.9510565162951535, 0.3090169943749476, 0 ],
[ 0.984807753012208, 0, -0.17364817766693033 ],
[ 0.30432233187297814, -0.9366078308002486, -0.17364817766693033 ],
[ -0.796726208379082, -0.5788554735638644, -0.17364817766693033 ],
[ -0.7967262083790821, 0.5788554735638641, -0.17364817766693033 ],
[ 0.3043223318729779, 0.9366078308002487, -0.17364817766693033 ],
[ 0.5000000000000001, -0.5, 0.7071067811865475 ],
[ -0.5, -0.5000000000000001, 0.7071067811865475 ],
[ -0.5000000000000001, 0.5, 0.7071067811865475 ],
[ 0.4999999999999999, 0.5000000000000001, 0.7071067811865475 ],
[ 6.123233995736766e-17, 0, 1 ]
]
来自 quickhull3d 的三角形: 暗淡 = 36x3
trianglesqh = [
[ 0, 1, 11 ],
[ 0, 9, 18 ],
[ 0, 10, 9 ],
[ 0, 11, 10 ],
[ 0, 15, 1 ],
[ 0, 18, 15 ],
[ 1, 2, 11 ],
[ 1, 15, 2 ],
[ 2, 12, 11 ],
[ 2, 15, 16 ],
[ 2, 16, 12 ],
[ 3, 6, 17 ],
[ 3, 7, 14 ],
[ 3, 13, 6 ],
[ 3, 14, 13 ],
[ 3, 17, 7 ],
[ 4, 5, 13 ],
[ 4, 12, 16 ],
[ 4, 13, 12 ],
[ 4, 16, 17 ],
[ 4, 17, 5 ],
[ 5, 6, 13 ],
[ 5, 17, 6 ],
[ 7, 8, 14 ],
[ 7, 17, 18 ],
[ 7, 18, 8 ],
[ 8, 9, 10 ],
[ 8, 10, 14 ],
[ 8, 18, 9 ],
[ 10, 11, 12 ],
[ 10, 12, 14 ],
[ 12, 13, 14 ],
[ 15, 18, 19 ],
[ 15, 19, 16 ],
[ 16, 19, 17 ],
[ 17, 19, 18 ]
]
来自 MATlab 的三角形: 暗淡 = 36x3
trianglesm = [
[ 0, 1, 11 ],
[ 0, 9, 18 ],
[ 0, 10, 9 ],
[ 0, 11, 10 ],
[ 0, 15, 1 ],
[ 0, 18, 15 ],
[ 1, 2, 11 ],
[ 1, 18, 2 ],
[ 2, 3, 11 ],
[ 2, 15, 16 ],
[ 2, 16, 3 ],
[ 3, 4, 12 ],
[ 3, 12, 11 ],
[ 3, 16, 4 ],
[ 4, 5, 12 ],
[ 4, 17, 5 ],
[ 5, 8, 13 ],
[ 5, 13, 12 ],
[ 5, 16, 17 ],
[ 5, 17, 6 ],
[ 6, 7, 14 ],
[ 6, 14, 13 ],
[ 6, 17, 7 ],
[ 7, 8, 14 ],
[ 7, 17, 18 ],
[ 7, 18, 8 ],
[ 8, 9, 10 ],
[ 8, 10, 14 ],
[ 8, 18, 9 ],
[ 10, 11, 14 ],
[ 11, 12, 13 ],
[ 11, 13, 14 ],
[ 15, 18, 19 ],
[ 15, 19, 16 ],
[ 16, 19, 17 ],
[ 17, 19, 18 ]
]
【问题讨论】:
-
原来我原来的排序算法不正确。这仍然没有解决问题..在更改排序算法后上传了新的三角形面
标签: javascript algorithm matlab convex-hull