@tolokoban/tgd
Version:
ToloGameDev library for WebGL2
62 lines • 3.4 kB
JavaScript
import { TgdVec3 } from "./../../index.js";
const EPSILON = 1e-12;
/**
* This class deals with the joint between two segments,
* and provide the points of the previous and next ellipses.
*
* ```
* -----+
* | +
* | / \
* | / \
* |/
* -----+
* \
* \
* ```
*/
export class Ellipse {
constructor(prv, cur, nxt, roundness, vertices, elements) {
this.prvPointsIndexes = [];
this.nxtPointsIndexes = [];
this.vecY = new TgdVec3();
this.vecPrvX = new TgdVec3();
this.vecPrvZ = new TgdVec3();
this.vecNxtX = new TgdVec3();
this.vecNxtZ = new TgdVec3();
this.scaleX = 1;
this.shiftZ = 0;
this.vecPrv = new TgdVec3();
}
computeAxis(prv, cur, nxt) {
if (!prv && !nxt)
throw new Error("Cannot compute axis without at least a previous or next point.");
// const { vecZ, vecPrv, vecX, vecY } = this
// vecZ.reset(...nxt.pos)
// .subtract(cur.pos)
// .normalize()
// vecPrv
// .reset(...prv.pos)
// .subtract(cur.pos)
// .normalize()
// vecY.fromCross(vecZ, vecPrv)
// const lenY = vecY.length
// vecX.fromCross(vecY, vecZ)
// const lenX = vecX.length
// if (lenY > EPSILON && lenX > EPSILON) {
// vecX.scale(1 / lenX)
// vecY.scale(1 / lenY)
// this.scaleX = 1 / Math.sin(Math.acos(vecX.dot(vecY)))
// return this
// }
// // Segments are perfectly aligned.
// vecX.fromCross([0, 1, 0], vecZ)
// if (vecX.length < EPSILON) {
// vecX.fromCross([0.24253562503633294, 0.9701425001453318, 0], vecZ)
// }
// vecY.fromCross(vecZ, vecX)
// this.scaleX = 1
// return this
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxsaXBzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYWludGVyL3R1YmVzL2VsbGlwc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUdwQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUE7QUFFckI7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLE9BQU8sT0FBTztJQWFoQixZQUNJLEdBQTZCLEVBQzdCLEdBQWlCLEVBQ2pCLEdBQTZCLEVBQzdCLFNBQWlCLEVBQ2pCLFFBQWtCLEVBQ2xCLFFBQWtCO1FBbEJOLHFCQUFnQixHQUFhLEVBQUUsQ0FBQTtRQUMvQixxQkFBZ0IsR0FBYSxFQUFFLENBQUE7UUFFdkMsU0FBSSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUE7UUFDcEIsWUFBTyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUE7UUFDdkIsWUFBTyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUE7UUFDdkIsWUFBTyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUE7UUFDdkIsWUFBTyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUE7UUFDdkIsV0FBTSxHQUFHLENBQUMsQ0FBQTtRQUNWLFdBQU0sR0FBRyxDQUFDLENBQUE7UUFDVixXQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQTtJQVMzQixDQUFDO0lBRUksV0FBVyxDQUFDLEdBQTZCLEVBQUUsR0FBaUIsRUFBRSxHQUE2QjtRQUMvRixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0VBQWdFLENBQUMsQ0FBQTtRQUVuRyw0Q0FBNEM7UUFDNUMseUJBQXlCO1FBQ3pCLHlCQUF5QjtRQUN6QixtQkFBbUI7UUFDbkIsU0FBUztRQUNULHlCQUF5QjtRQUN6Qix5QkFBeUI7UUFDekIsbUJBQW1CO1FBQ25CLCtCQUErQjtRQUMvQiwyQkFBMkI7UUFDM0IsNkJBQTZCO1FBQzdCLDJCQUEyQjtRQUMzQiwwQ0FBMEM7UUFDMUMsMkJBQTJCO1FBQzNCLDJCQUEyQjtRQUMzQiw0REFBNEQ7UUFDNUQsa0JBQWtCO1FBQ2xCLElBQUk7UUFDSixxQ0FBcUM7UUFDckMsa0NBQWtDO1FBQ2xDLCtCQUErQjtRQUMvQix5RUFBeUU7UUFDekUsSUFBSTtRQUNKLDZCQUE2QjtRQUM3QixrQkFBa0I7UUFDbEIsY0FBYztJQUNsQixDQUFDO0NBQ0oifQ==