【问题标题】:Create convex hull around points with JavaScript使用 JavaScript 在点周围创建凸包
【发布时间】:2014-04-02 23:01:37
【问题描述】:

我想围绕使用 KineticJS 创建的图像创建一个外壳。

1 - 我用 [x,y] 将图像的所有顶点保存在一个数组中:

var points = [[0, 0], [0,350], [170, 0], [170, 300], [135, 135] , [135, 435], [305, 135], [305, 435]];

2 - 我想围绕点创建一个凸包

3 - 之后,我想将船体的距离设置得高一点,这样所有物体都可以在船体中。

我找到了javascript implementation 用于在线创建凸包,并尝试将其绑定到我的 KineticJS 脚本中。

但我得到一个错误: 未捕获的 RangeError:超出最大调用堆栈大小 在 buildConvexHull 函数中:

allBaseLines.push(baseLine)

我的代码有问题,但它不起作用... http://jsfiddle.net/gvFrd/5/

【问题讨论】:

  • 凸包算法可能需要points 中的对列表。首先是 x 列表,然后是 y 坐标列表。
  • 我将结构更改为 var points = [[0, 0], [0,350], [170, 0], [170, 300], [135, 135] , [135, 435] , [305, 135], [305, 435]];但错误并没有消失。
  • for 循环看起来很奇怪。尝试合并这两行,for( var pt in points)。但是可能我对 JS 还不够了解。
  • 谢谢,这不是错,但是我意识到我太笨了,无法复制和粘贴...功能与getConvexHull相同...我全部更新了,但是错误是没有定义基线...

标签: javascript kineticjs convex-hull


【解决方案1】:

Hull.js 看起来像是您正在寻找的答案。制作凸包后,它还可以将边缘向内推并生成更多段,以获得看起来非常准确的轮廓。

https://www.npmjs.com/package/hull.js

【讨论】:

  • 那个 hull 是给 node.js 的,还有其他的给客户端吗?
  • 对不起,我不知道。
【解决方案2】:

一个简单的算法是将一组点分成 2 个半组,找到最远的 3 个点并对这些点进行三角剖分。然后三角形内的每个点都在凸包中。然后对其他点重复上述步骤。搜索快速外壳算法。您还可以使用 delaunay 三角剖分。你可以下载我的凸包类@phpclasses.org。它使用 delaunay 三角剖分。

【讨论】:

  • 看来安德鲁的算法会更容易实现。
猜你喜欢
  • 1970-01-01
  • 2011-06-03
  • 2015-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-01
  • 2011-03-06
  • 2018-09-17
相关资源
最近更新 更多