# barycentric-coordinates

> get barycentric coordinates for triangle and tetrahedron, convert to/from cartesian coordinates, interpolate vertex normals

Latest version **0.0.7** (published 2022-04-05) · CC0-1.0 license · 0 weekly downloads

## Install

```sh
npm install barycentric-coordinates
pnpm add barycentric-coordinates
yarn add barycentric-coordinates
bun add barycentric-coordinates
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.7 |
| Published | 2022-04-05 |
| First published | 2021-10-13 |
| Weekly downloads | 0 |
| License | CC0-1.0 |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 15.2 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | stonkpunk |
| Maintainers | stonkpunk |
| Keywords | triangle, tetrahedron, barycentric, cartesian, coordinates, normal, interpolation |

## Links

- npm: https://www.npmjs.com/package/barycentric-coordinates
- Homepage: https://github.com/stonkpunk/my-npm-modules/tree/main/barycentric-coordinates
- npm.io page: https://npm.io/package/barycentric-coordinates

## Recent versions

- 0.0.7 (latest) — 2022-04-05
- 0.0.6 — 2022-03-15
- 0.0.5 — 2022-03-15
- 0.0.4 — 2022-03-11
- 0.0.3 — 2022-03-09
- 0.0.2 — 2021-10-20
- 0.0.1 — 2021-10-13

## README

# barycentric-coordinates

get barycentric coordinates for triangle and tetrahedron, convert to/from cartesian coordinates, interpolate vertex normals

## Installation

```sh
npm i barycentric-coordinates
```

## Usage 

```javascript
var bc = require('barycentric-coordinates');

//triangle is 3 pts [x,y,z]
var triangle = [[0,0,1],[1,0,1],[1,1,1]];

//tetrahedron is 4 pts [x,y,z]
var tetrahedron = [[0,0,1],[1,0,1],[1,1,1],[1,1,0]];

//3d pt in space, cartesian coords
//note -- for correct triangular barycentric coordinates, the point must be in the same plane as the triangle!
//        but if you only want tetrahedral barycentric coordinates, the position of the point does not matter.
var pt = [2.0/3.0, 1.0/3.0, 1.0]; //here we pick the point in the middle of the triangle

//get barycentric coordinates...
var triBaryCoords = bc.triangleBarycentricCoords(pt,triangle); 
var tetraBaryCoords = bc.tetrahedronBarycentricCoords(pt,tetrahedron); 

console.log("cartesian",pt); //[ 0.667, 0.333, 1.0]
console.log("barycentric",triBaryCoords); //[ 0.333, 0.333, 0.333]
console.log("barycentric",tetraBaryCoords); //[ 0.333, 0.333, 0.333, 0.0]

//convert back to cartesian from barycentric...

var triCartesianCoords = bc.triangleCartesianCoords(triBaryCoords, triangle);
var tetraCartesianCoords = bc.tetrahedronCartesianCoords(tetraBaryCoords, tetrahedron);

console.log("cartesian",triCartesianCoords); //[ 0.667, 0.333, 1.0]
console.log("cartesian",tetraCartesianCoords); //[ 0.667, 0.333, 1.0]

//can also use barycoords to interpolate vertex normals or UVs. each normal has same format as one of the triangle pts. UVs are similar but dont have a third coordinate.
//triangleInterpolateNormals(pt, tri, normalA, normalB, normalC)
//triangleInterpolateUVs((pt, tri, uvA, uvB, uvC)
```

## See Also

- [tetrahedron-distance](https://www.npmjs.com/package/tetrahedron-distance) - distance to tetrahedron



[![stonks](https://i.imgur.com/UpDxbfe.png)](https://www.npmjs.com/~stonkpunk)

---
_Source: https://npm.io/package/barycentric-coordinates · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
