多次尝试,xross 异常的原因很可能是存在两条斜率很接近而又相交的线时 JavaScript 的 number
运算精度不够导致无法分辨,或者是散列函数区分度太小。散列上,我原来用的是 x * 2147483647 + y
的形式,足以区分了吧;后来直接用 toString()
之后求字符串散列值(BKDR hash),这样理论上 JavaScript 的数字精度有多高散列就能做到多好。但是还是失败了……
感觉被朴素的二重循环方法狠狠地嘲笑了一把。
开始嵌入 libtess。在其示例页面嵌入的脚本中有这么一段:
var startTime = window.nowish();
polyTriangles = triangulate(contours);
initArrayBuffer(polyTriangles);
var endTime = window.nowish();
很好奇 window.nowish()
是个什么东西,于是我用 Chrome 尝试了一下:
> window.nowish
function () { [native code] }
说明这是原生的代码而不是自定义的 JavaScript 函数。然而这个 API 并没有公开,谷歌了一下,即使限定了搜索词(javascript window "nowish"
)都找不到。相比之下,Window.performance 要更为人所知一些。
还找到了一个对 Java 的 HashSet 进行散列攻击的例子:http://keary.cn/?p=845。