2024-12-17 09:52:09 +00:00
|
|
|
# 凸包算法的wasm实现
|
|
|
|
[在线测试地址](https://kuraa.cc/upload/convex_hull.html)
|
|
|
|
```js
|
|
|
|
function callWasmConvexHull(points) {
|
|
|
|
//长度
|
|
|
|
var n = points.length;
|
|
|
|
var pointsPtr = Module._malloc(n * 8); //8字节一个点
|
|
|
|
|
|
|
|
for (let i = 0; i < n; i++) {
|
|
|
|
Module.setValue(pointsPtr + i * 8, points[i].x, 'i32');
|
|
|
|
Module.setValue(pointsPtr + i * 8 + 4, points[i].y, 'i32');
|
|
|
|
}
|
|
|
|
//多少点
|
|
|
|
var resultPtr = Module._malloc(n * 8);
|
|
|
|
var resultSizePtr = Module._malloc(4);
|
|
|
|
//调用wasm
|
|
|
|
Module._convexHull(pointsPtr, n, resultPtr, resultSizePtr);
|
|
|
|
var resultSize = Module.getValue(resultSizePtr, 'i32');
|
|
|
|
var resultPoints = [];
|
|
|
|
//读
|
|
|
|
for (let i = 0; i < resultSize; i++) {
|
|
|
|
var x = Module.getValue(resultPtr + i * 8, 'i32');
|
|
|
|
var y = Module.getValue(resultPtr + i * 8 + 4, 'i32');
|
|
|
|
resultPoints.push({ x: x, y: y });
|
|
|
|
}
|
|
|
|
// 释放
|
|
|
|
Module._free(pointsPtr);
|
|
|
|
Module._free(resultPtr);
|
|
|
|
Module._free(resultSizePtr);
|
|
|
|
return resultPoints
|
|
|
|
}
|
|
|
|
```
|