Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 3D凸包算法类似于Matlab';斯康弗林酒店_Javascript_Algorithm_Matlab_Convex Hull - Fatal编程技术网

Javascript 3D凸包算法类似于Matlab';斯康弗林酒店

Javascript 3D凸包算法类似于Matlab';斯康弗林酒店,javascript,algorithm,matlab,convex-hull,Javascript,Algorithm,Matlab,Convex Hull,我一直在努力为Javascript找到一个凸包库,它提供与Matlab convhulln函数相同的输出 我正在将一些代码从Matlab转录到Javascript,我需要找到组成一组顶点凸包的三角形。Matlab使用convhulln(利用qhull函数)计算一些3D点的凸包。在本例中,当我将相同的顶点传递给每个顶点时,Matlab convhulln将输出一组不同于quickhull3d的三角形面。有些面重合,但通常大多数面不重合。它们唯一的相似之处是它们都输出相同数量的面(尽管面的实际顶点不

我一直在努力为Javascript找到一个凸包库,它提供与Matlab convhulln函数相同的输出

我正在将一些代码从Matlab转录到Javascript,我需要找到组成一组顶点凸包的三角形。Matlab使用convhulln(利用qhull函数)计算一些3D点的凸包。在本例中,当我将相同的顶点传递给每个顶点时,Matlab convhulln将输出一组不同于quickhull3d的三角形面。有些面重合,但通常大多数面不重合。它们唯一的相似之处是它们都输出相同数量的面(尽管面的实际顶点不相同)

在Javascript中,我尝试了不同的库,每个库都给出了不同的输出

从npm我试过:

quickhull3d
-

大多数其他算法都是为二维点设计的,所以我排除了它们

如有任何想法、建议或反馈,将不胜感激!谢谢大家!

下面是我使用的顶点以及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 ] 
]
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 ]
]
MATlab中的三角形: 尺寸=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 ] 
]
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 ]
]

您可以尝试使用Bowyer-Watson算法,但要使用外球面和四面体:。

这是标准的“非答案”。链接只回答,没有解释,或任何东西。谢谢。我会调查的。我仍然在努力让它工作,结果我原来的排序算法是不正确的。这仍然不能解决问题。。在更改排序算法后已上载新的三角形面