https://github.com/catenda/intersection-wasm
  
  
    Mesh-Mesh and Triangle-Triangle Intersection tests based on the algorithm by Tomas Akenine-Möller 
    https://github.com/catenda/intersection-wasm
  
3d algorithm collision collision-detection intersect intersection mesh mesh-processing meshes npm npm-module npm-package rust rust-library triangle triangle-intersection-tests triangles wasm webassembly
        Last synced: 7 months ago 
        JSON representation
    
Mesh-Mesh and Triangle-Triangle Intersection tests based on the algorithm by Tomas Akenine-Möller
- Host: GitHub
- URL: https://github.com/catenda/intersection-wasm
- Owner: catenda
- License: mit
- Created: 2019-08-09T14:07:55.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2023-01-06T02:04:58.000Z (almost 3 years ago)
- Last Synced: 2024-04-24T23:21:19.438Z (over 1 year ago)
- Topics: 3d, algorithm, collision, collision-detection, intersect, intersection, mesh, mesh-processing, meshes, npm, npm-module, npm-package, rust, rust-library, triangle, triangle-intersection-tests, triangles, wasm, webassembly
- Language: Rust
- Homepage:
- Size: 1.17 MB
- Stars: 18
- Watchers: 7
- Forks: 2
- Open Issues: 19
- 
            Metadata Files:
            - Readme: README.md
- License: LICENSE.md
 
Awesome Lists containing this project
README
          
  
    intersection-wasm
  
  Mesh-Mesh and Triangle-Triangle Intersection tests based on the algorithm by Tomas Akenine-Möller.[1]
  
  Built with 🦀 Rust and 🕸 WebAssembly.
[](https://travis-ci.org/catenda/intersection-wasm) [](https://github.com/catenda/intersection-wasm) [](https://www.npmjs.com/package/intersection-wasm) [](https://github.com/catenda/intersection-wasm)
## About
Mesh-Mesh and Triangle-Triangle Intersection tests.
```typescript
/**
* Triangle/triangle intersection test
* @returns true if the triangles intersect, otherwise false
*/
const noDivTriTriIsect = (
  v0: [number, number, number],
  v1: [number, number, number],
  v2: [number, number, number],
  u0: [number, number, number],
  u1: [number, number, number],
  u2: [number, number, number],
  // not used by default
  epsilon?: number
): boolean => {...}
/**
* Mesh/mesh intersection test
* @returns true if the meshes intersect, otherwise false
*/
const meshMeshIsect => (
  // m1.length should be divisible by 9
  m1: ArrayLike,
  // m2.length should be divisible by 9
  m2: ArrayLike,
  // defaults to 0.000001
  epsilon?: number
): boolean => {...}
```
## 🚴 Usage
### Installation
You will need a package manager, either npm ([comes with node](https://nodejs.org/en/download)) or [yarn](https://yarnpkg.com/lang/en/docs/install).
You will also need a bundler, [webpack](https://webpack.js.org) or [Rollup](https://rollupjs.org/guide/en), configured for your project.
Then, in a terminal:
```shell
npm install intersection-wasm
# Or, yarn add intersection-wasm
```
Afterwards, import and use as follows:
```js
import * as intersection from 'intersection-wasm';
intersection.noDivTriTriIsect(
  [0.848311, 0.71034, 0.799546],
  [0.921121, 0.519029, 0.950985],
  [0, 1.751, 0],
  [-0.5, 0.8755, 0.5],
  [0.5, 0.8755, 1.5],
  [0.5, 0.8755, 0.5]
); // ← false
intersection.meshMeshIsect(
  new Float32Array([
    -140.98574829101562,
    -173.12110900878906,
    -0.9740447998046875,
    -140.98574829101562,
    -174.72113037109375,
    -0.9740447998046875,
    -140.68576049804688,
    -174.72113037109375,
    -0.9740447998046875
  ]),
  new Float32Array([
    -140.98574829101562,
    -174.72113037109375,
    -0.9740447998046875,
    -140.98574829101562,
    -174.72113037109375,
    -0.9740447998046875,
    -140.98574829101562,
    -174.72113037109375,
    -1.137430191040039,
    -140.68576049804688,
    -174.72113037109375,
    -1.137430191040039,
    -140.98574829101562,
    -174.72113037109375,
    -0.9740447998046875,
    -140.68576049804688,
    -174.72113037109375,
    -1.137430191040039
  ]),
  0.0001
); // ← true
```
## ⚙ Development
### 🛠️ Build WASM
```
wasm-pack build
```
### 🛠️ Build natively
```
cargo build
```
### 🔬 Run tests in the browser
```
cd demo && npm i && npm start
```
### 🔬 Test natively
```
cargo test
```
### 🎁 Publish to NPM
```
wasm-pack publish
```
1. Möller, T. (1997). A fast triangle-triangle intersection test. Journal of graphics tools, 2(2), 25-30.