【问题标题】:Triangulation library works with firefox but not in Chrome?三角测量库适用于 Firefox,但不适用于 Chrome?
【发布时间】:2016-09-09 13:26:45
【问题描述】:

我正在使用库 Poly2Tri 进行三角测量。

我的代码:

var swctx = new poly2tri.SweepContext(contour);
swctx.triangulate();

var triangles = swctx.getTriangles(); 
for (var w = 0; w < triangles.length; w++) {
    pts_tri = triangles[w].points_;
    index1 = pts2.findIndex(x => x[0] == pts_tri[0].x && x[1] == pts_tri[0].y)
} 

for (var k = 0; k < result.length; k++) { 
    geometry.faces.push(
        new THREE.Face3(result[k][0].id, result[k][1].id, result[k][2].id)
    );
}

加载库时不会引发错误!

结果:

1.) Mozzila Firefox:工作(没有错误发生)!

2.) 谷歌浏览器:它不工作! (错误信息:无法处理共线点)

我的问题是:

1.)为什么包含相同库的相同代码适用于 Firefox 而不适用于 Chrome?是否依赖浏览器的Javascript引擎?

所以我读到 Chrome 使用 V8 引擎,而 Firefox 使用 Rhino/SpiderMonkey。 但我认为这仅取决于我用于三角测量的库!

2.) 如何在 Chrome 中运行代码(使用相同的库?)是否有可能避免此错误?

3.) 库是否支持共线点?因为在 Firefox 中它可以工作!!!

【问题讨论】:

  • 加载库时是否引发错误?因为project has automated test for browswers 包括 Chrome。如果在运行您的代码时失败,请在此处发布您的代码(并向制作 Poly2Tri 的人道歉)。

标签: javascript three.js mesh triangulation


【解决方案1】:

在对形状进行三角剖分时,您应该始终尽量避免几何定义中的共线(和重复)点。最好在三角测量之前清理您的数据并删除这些点。

大多数用于镶嵌或三角剖分的库在处理共线点时会遇到问题。

还要注意,如果所有点都共线(意味着它们都在一条线上)三角测量是不可能的,因为一条线不能分成三角形。

您可以使用行列式来检测点是否共线(在这种情况下,行列式为零d = 0)。但可能有更有效的算法。另请阅读here also more on this topic in this question on stackoverflow


计算determinant

由于您使用的是three.js,您可以轻松地使用the .determinant() method of the THREE.Matrix3 class 来计算三点的行列式:

var v1 = ...
var v2 = ...
var v3 = ...

var matrix = new THREE.Matrix3();

matrix.set(
    v1.x, v1.y, 1, 
    v2.x, v2.y, 1,
    v3.x, v3.y, 1
);

var d = matrix.determinant();

【讨论】:

    猜你喜欢
    • 2018-09-08
    • 2014-11-17
    • 2015-06-09
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    相关资源
    最近更新 更多