From b9b5993a63042caadf213f0b168077470590d56f Mon Sep 17 00:00:00 2001 From: Akseli Palen Date: Mon, 22 May 2023 03:44:10 +0300 Subject: [PATCH 1/7] improve plane3.projectToPlane ratio handling --- lib/plane3/projectToPlane.js | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/lib/plane3/projectToPlane.js b/lib/plane3/projectToPlane.js index fa0e2c12..f6591b4d 100644 --- a/lib/plane3/projectToPlane.js +++ b/lib/plane3/projectToPlane.js @@ -24,20 +24,30 @@ module.exports = (plane, target, camera) => { if (camera) { // Find scaling ratio. let ratio - // Distances to camera. + // Distance from camera to the plane + // Distances from camera to the target. const distToPlane = camera.z - plane.z const distToTarget = camera.z - target.z // If camera is at the plane depth, // the ratio would become infinite. if (distToPlane === 0) { - // Becomes singular + // Becomes singular. // TODO throw error instead singular? plane = { a: 0, b: 0, x: camera.x, y: camera.y } } else { - ratio = distToTarget / distToPlane - // Treat camera as 2d point projected onto the reference plane. - // Treat plane as plane2 orthogonally projected onto the reference plane. - plane = scaleBy(plane, camera, ratio) + if (distToTarget === 0) { + // Camera on the target. Projection would have infinite size. + // Becomes singular. + // TODO throw error instead singular? + plane = { a: 0, b: 0, x: camera.x, y: camera.y } + } else { + // Scaling ratio + ratio = distToTarget / distToPlane + + // Treat camera as 2d point projected onto the reference plane. + // Treat plane as plane2 orthogonally projected onto the reference plane. + plane = scaleBy(plane, camera, ratio) + } } } From 23b56291ae96bf95c6cd63bafe0d36fd706d18e0 Mon Sep 17 00:00:00 2001 From: Akseli Palen Date: Sun, 15 Oct 2023 18:38:39 +0300 Subject: [PATCH 2/7] implement circle2.collisionArea --- lib/sphere2/collisionArea.js | 45 ++++++++++++++++++++++++++++++ lib/sphere2/index.js | 1 + test/sphere2/collisionArea.test.js | 27 ++++++++++++++++++ test/sphere2/index.test.js | 1 + 4 files changed, 74 insertions(+) create mode 100644 lib/sphere2/collisionArea.js create mode 100644 test/sphere2/collisionArea.test.js diff --git a/lib/sphere2/collisionArea.js b/lib/sphere2/collisionArea.js new file mode 100644 index 00000000..b5a96e07 --- /dev/null +++ b/lib/sphere2/collisionArea.js @@ -0,0 +1,45 @@ +module.exports = (c, cc) => { + // @affineplane.sphere2.collisionArea(c, cc) + // + // Compute collision area between two spheres. + // + // Parameters: + // c + // a sphere2 + // cc + // a sphere2 + // + // Return + // a scalar2, number, the area. + // + + // For details about circle intersection, see: + // https://mathworld.wolfram.com/Circle-CircleIntersection.html + const dx = cc.x - c.x + const dy = cc.y - c.y + const d2 = dx * dx + dy * dy + const r = c.r + const rr = cc.r + const d = Math.sqrt(d2) + const r2 = r * r + const rr2 = rr * rr + + if (r === 0 || rr === 0) { + // One of the circles is a point. + return 0 + } + + if (d === 0) { + // Concentric circles. Area of the smaller is the overlap. + if (r <= rr) { + return Math.PI * r2 + } + return Math.PI * rr2 + } + + const area = r2 * Math.acos((d2 + r2 - rr2) / (2 * d * r)) + + rr2 * Math.acos((d2 + rr2 - r2) / (2 * d * rr)) - + 0.5 * Math.sqrt((-d + r + rr) * (d + r - rr) * (d - r + rr) * (d + r + rr)) + + return area +} diff --git a/lib/sphere2/index.js b/lib/sphere2/index.js index 73e73103..38df27ab 100644 --- a/lib/sphere2/index.js +++ b/lib/sphere2/index.js @@ -24,6 +24,7 @@ exports.atCenter = require('./atCenter') exports.boundingBox = require('./boundingBox') exports.boundingCircle = require('./boundingCircle') exports.collide = require('./collide') +exports.collisionArea = require('./collisionArea') exports.copy = require('./copy') exports.create = require('./create') exports.gap = require('./gap') diff --git a/test/sphere2/collisionArea.test.js b/test/sphere2/collisionArea.test.js new file mode 100644 index 00000000..fc3833ca --- /dev/null +++ b/test/sphere2/collisionArea.test.js @@ -0,0 +1,27 @@ +const sphere2 = require('../../lib/sphere2') + +module.exports = (ts) => { + ts.test('case: basic collisionArea', (t) => { + t.equal( + sphere2.collisionArea({ x: 0, y: 0, r: 0 }, { x: 0, y: 0, r: 0 }), + 0, + 'zero spheres have zero overlap' + ) + + t.equal( + sphere2.collisionArea({ x: 0, y: 0, r: 1 }, { x: 0, y: 0, r: 2 }), + Math.PI, + 'concentric spheres overlap' + ) + + t.almostEqual( + sphere2.collisionArea({ x: 0, y: 0, r: 1 }, { x: 1, y: 0, r: 1 }), + // overlap = 2 * segment + // segment = π/3 - sqrt(3)/4 + (2 * Math.PI / 3) - Math.sqrt(3) / 2, + 'spheres overlap' + ) + + t.end() + }) +} diff --git a/test/sphere2/index.test.js b/test/sphere2/index.test.js index 5e681b23..7b61a9ee 100644 --- a/test/sphere2/index.test.js +++ b/test/sphere2/index.test.js @@ -5,6 +5,7 @@ const units = { boundingBox: require('./boundingBox.test'), boundingCircle: require('./boundingCircle.test'), collide: require('./collide.test'), + collisionArea: require('./collisionArea.test'), gap: require('./gap.test'), hasPoint: require('./hasPoint.test'), homothety: require('./homothety.test'), From 76f481446767c5a293164f1d28d7e7564cbfc0e8 Mon Sep 17 00:00:00 2001 From: Akseli Palen Date: Sun, 15 Oct 2023 19:24:02 +0300 Subject: [PATCH 3/7] implement test utility almostEqualOrient --- test/index.test.js | 1 + test/utils/almostEqualOrient.js | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 test/utils/almostEqualOrient.js diff --git a/test/index.test.js b/test/index.test.js index 9dc8f1bc..c078ed7e 100644 --- a/test/index.test.js +++ b/test/index.test.js @@ -52,6 +52,7 @@ test.Test.prototype.almostEqualBasis = require('./utils/almostEqualBasis') test.Test.prototype.almostEqualBox = require('./utils/almostEqualBox') test.Test.prototype.almostEqualCircle = require('./utils/almostEqualSphere') test.Test.prototype.almostEqualHelmert = require('./utils/almostEqualHelmert') +test.Test.prototype.almostEqualOrient = require('./utils/almostEqualOrient') test.Test.prototype.almostEqualPoint = require('./utils/almostEqualPoint') test.Test.prototype.almostEqualSphere = test.Test.prototype.almostEqualCircle test.Test.prototype.almostEqualVector = require('./utils/almostEqualVector') diff --git a/test/utils/almostEqualOrient.js b/test/utils/almostEqualOrient.js new file mode 100644 index 00000000..7b037f08 --- /dev/null +++ b/test/utils/almostEqualOrient.js @@ -0,0 +1,19 @@ +const orient2 = require('../../lib/orient2') + +module.exports = function (actual, expected, message) { + // Custom tape.js assertion. + + let isEqual = false + if (orient2.validate(expected)) { + // Expect orient2 + isEqual = orient2.validate(actual) + isEqual = isEqual && orient2.almostEqual(actual, expected) + } + + this._assert(isEqual, { + message: message || 'orientation should have correct elements', + operator: 'almostEqualOrientation', + actual, + expected + }) +} From 4d2049e47a045cf844271bb21f734521576356a8 Mon Sep 17 00:00:00 2001 From: Akseli Palen Date: Sun, 15 Oct 2023 19:24:27 +0300 Subject: [PATCH 4/7] implement orient2 .fromPolar .fromVector --- lib/orient2/fromPolar.js | 46 ++++++++++++++++++++++++++++++++++ lib/orient2/index.js | 2 ++ test/orient2/fromPolar.test.js | 20 +++++++++++++++ test/orient2/index.test.js | 1 + 4 files changed, 69 insertions(+) create mode 100644 lib/orient2/fromPolar.js create mode 100644 test/orient2/fromPolar.test.js diff --git a/lib/orient2/fromPolar.js b/lib/orient2/fromPolar.js new file mode 100644 index 00000000..aff90d9f --- /dev/null +++ b/lib/orient2/fromPolar.js @@ -0,0 +1,46 @@ +const sqrt = Math.sqrt +const sin = Math.sin +const cos = Math.cos + +module.exports = (direction) => { + // @affineplane.orient2.fromPolar(direction) + // @affineplane.orient2.fromVector(vec) + // + // Create an orientation from angle or vector. + /// TODO See also affineplane.orient2.toPolar + // + // Parameters: + // direction + // a number, the azimuth angle in radians. + // a dir2 + // a vec2 + // + // Return + // an orient2 + // + + if (!direction) { + return { a: 1, b: 0 } // default + } + + if (typeof direction === 'object') { + const x = direction.x + const y = direction.y + const norm = sqrt(x * x + y * y) // sums up to vector length + return { + // Normalize to 1 + a: direction.x / norm, + b: direction.y / norm + } + } + + if (typeof direction === 'number') { + // Radians + return { + a: cos(direction), + b: sin(direction) + } + } + + return { a: 1, b: 0 } // default +} diff --git a/lib/orient2/index.js b/lib/orient2/index.js index 70356605..951bd5c5 100644 --- a/lib/orient2/index.js +++ b/lib/orient2/index.js @@ -4,6 +4,8 @@ // exports.almostEqual = require('./almostEqual') exports.create = require('./create') +exports.fromPolar = require('./fromPolar') +exports.fromVector = exports.fromPolar exports.transitFrom = require('./transitFrom') exports.transitTo = require('./transitTo') exports.validate = require('./validate') diff --git a/test/orient2/fromPolar.test.js b/test/orient2/fromPolar.test.js new file mode 100644 index 00000000..e0ffc79c --- /dev/null +++ b/test/orient2/fromPolar.test.js @@ -0,0 +1,20 @@ +const affineplane = require('../../index') +const orient2 = affineplane.orient2 + +module.exports = (ts) => { + ts.test('case: basic fromPolar', (t) => { + t.almostEqualOrient( + orient2.fromPolar(0), + { a: 1, b: 0 }, + 'zero angle' + ) + + t.almostEqualOrient( + orient2.fromPolar(Math.PI / 2), + { a: 0, b: 1 }, + 'angle of +90deg' + ) + + t.end() + }) +} diff --git a/test/orient2/index.test.js b/test/orient2/index.test.js index c4e356f9..6fb772e0 100644 --- a/test/orient2/index.test.js +++ b/test/orient2/index.test.js @@ -2,6 +2,7 @@ const units = { almostEqual: require('./almostEqual.test'), create: require('./create.test'), + fromPolar: require('./fromPolar.test'), validate: require('./validate.test') } From 37cf07db030ff51eed82893479477062a7a856a4 Mon Sep 17 00:00:00 2001 From: Akseli Palen Date: Sun, 15 Oct 2023 20:09:40 +0300 Subject: [PATCH 5/7] implement sphere2 sphere3 .fromPoints --- lib/sphere2/fromPoints.js | 23 +++++++++++++++++++++++ lib/sphere2/index.js | 1 + lib/sphere3/fromPoints.js | 25 +++++++++++++++++++++++++ lib/sphere3/index.js | 1 + test/sphere2/fromPoints.test.js | 15 +++++++++++++++ test/sphere2/index.test.js | 1 + test/sphere3/fromPoints.test.js | 15 +++++++++++++++ test/sphere3/index.test.js | 1 + 8 files changed, 82 insertions(+) create mode 100644 lib/sphere2/fromPoints.js create mode 100644 lib/sphere3/fromPoints.js create mode 100644 test/sphere2/fromPoints.test.js create mode 100644 test/sphere3/fromPoints.test.js diff --git a/lib/sphere2/fromPoints.js b/lib/sphere2/fromPoints.js new file mode 100644 index 00000000..27110939 --- /dev/null +++ b/lib/sphere2/fromPoints.js @@ -0,0 +1,23 @@ +module.exports = (p, q) => { + // @affineplane.sphere2.fromPoints(p, q) + // + // Create a sphere2 from two points, + // the origin p and the circumference point q. + // + // Parameters: + // p + // a point2, at the circle center. + // q + // a point2, on the circle circumference. + // + // Return + // a sphere2 + // + const dx = q.x - p.x + const dy = q.y - p.y + return { + x: p.x, + y: p.y, + r: Math.sqrt(dx * dx + dy * dy) + } +} diff --git a/lib/sphere2/index.js b/lib/sphere2/index.js index 38df27ab..b2ca71a7 100644 --- a/lib/sphere2/index.js +++ b/lib/sphere2/index.js @@ -27,6 +27,7 @@ exports.collide = require('./collide') exports.collisionArea = require('./collisionArea') exports.copy = require('./copy') exports.create = require('./create') +exports.fromPoints = require('./fromPoints') exports.gap = require('./gap') exports.hasPoint = require('./hasPoint') exports.homothety = require('./homothety') diff --git a/lib/sphere3/fromPoints.js b/lib/sphere3/fromPoints.js new file mode 100644 index 00000000..a9494d80 --- /dev/null +++ b/lib/sphere3/fromPoints.js @@ -0,0 +1,25 @@ +module.exports = (p, q) => { + // @affineplane.sphere3.fromPoints(p, q) + // + // Create a sphere3 from two points, + // the origin p and the circumference point q. + // + // Parameters: + // p + // a point3, at the circle center. + // q + // a point3, on the circle circumference. + // + // Return + // a sphere3 + // + const dx = q.x - p.x + const dy = q.y - p.y + const dz = q.z - p.z + return { + x: p.x, + y: p.y, + z: p.z, + r: Math.sqrt(dx * dx + dy * dy + dz * dz) + } +} diff --git a/lib/sphere3/index.js b/lib/sphere3/index.js index ed7990c1..abc5e61e 100644 --- a/lib/sphere3/index.js +++ b/lib/sphere3/index.js @@ -25,6 +25,7 @@ exports.boundingSphere = require('./boundingSphere') exports.collide = require('./collide') exports.copy = require('./copy') exports.create = require('./create') +exports.fromPoints = require('./fromPoints') exports.gap = require('./gap') exports.hasPoint = require('./hasPoint') exports.homothety = require('./homothety') diff --git a/test/sphere2/fromPoints.test.js b/test/sphere2/fromPoints.test.js new file mode 100644 index 00000000..37d55f41 --- /dev/null +++ b/test/sphere2/fromPoints.test.js @@ -0,0 +1,15 @@ +const sphere2 = require('../../lib/sphere2') + +module.exports = (ts) => { + ts.test('case: create sphere2 from two points', (t) => { + const p1 = { x: 1, y: 1 } + const p2 = { x: 5, y: 4 } + t.deepEqual( + sphere2.fromPoints(p1, p2), + { x: 1, y: 1, r: 5 }, + 'correct origin and radius' + ) + + t.end() + }) +} diff --git a/test/sphere2/index.test.js b/test/sphere2/index.test.js index 7b61a9ee..6d3256cb 100644 --- a/test/sphere2/index.test.js +++ b/test/sphere2/index.test.js @@ -6,6 +6,7 @@ const units = { boundingCircle: require('./boundingCircle.test'), collide: require('./collide.test'), collisionArea: require('./collisionArea.test'), + fromPoints: require('./fromPoints.test'), gap: require('./gap.test'), hasPoint: require('./hasPoint.test'), homothety: require('./homothety.test'), diff --git a/test/sphere3/fromPoints.test.js b/test/sphere3/fromPoints.test.js new file mode 100644 index 00000000..6f3b40ed --- /dev/null +++ b/test/sphere3/fromPoints.test.js @@ -0,0 +1,15 @@ +const sphere3 = require('../../lib/sphere3') + +module.exports = (ts) => { + ts.test('case: create sphere3 from two points', (t) => { + const p1 = { x: 1, y: 1, z: 1 } + const p2 = { x: 3, y: 3, z: 2 } + t.deepEqual( + sphere3.fromPoints(p1, p2), + { x: 1, y: 1, z: 1, r: 3 }, + 'correct origin and radius' + ) + + t.end() + }) +} diff --git a/test/sphere3/index.test.js b/test/sphere3/index.test.js index 95723a37..e480f979 100644 --- a/test/sphere3/index.test.js +++ b/test/sphere3/index.test.js @@ -5,6 +5,7 @@ const units = { boundingBox: require('./boundingBox.test'), boundingSphere: require('./boundingSphere.test'), collide: require('./collide.test'), + fromPoints: require('./fromPoints.test'), gap: require('./gap.test'), hasPoint: require('./hasPoint.test'), homothety: require('./homothety.test'), From b296a15877dec34c918e716279383e04b591e2b3 Mon Sep 17 00:00:00 2001 From: Akseli Palen Date: Sun, 15 Oct 2023 21:58:16 +0300 Subject: [PATCH 6/7] optimise and test sphere2.collisionArea --- lib/sphere2/collisionArea.js | 5 +++++ test/sphere2/collisionArea.test.js | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/lib/sphere2/collisionArea.js b/lib/sphere2/collisionArea.js index b5a96e07..a47d7ff1 100644 --- a/lib/sphere2/collisionArea.js +++ b/lib/sphere2/collisionArea.js @@ -37,6 +37,11 @@ module.exports = (c, cc) => { return Math.PI * rr2 } + if (d > r + rr) { + // Circles too distant. Just for optimization. + return 0 + } + const area = r2 * Math.acos((d2 + r2 - rr2) / (2 * d * r)) + rr2 * Math.acos((d2 + rr2 - r2) / (2 * d * rr)) - 0.5 * Math.sqrt((-d + r + rr) * (d + r - rr) * (d - r + rr) * (d + r + rr)) diff --git a/test/sphere2/collisionArea.test.js b/test/sphere2/collisionArea.test.js index fc3833ca..08d82c53 100644 --- a/test/sphere2/collisionArea.test.js +++ b/test/sphere2/collisionArea.test.js @@ -14,6 +14,12 @@ module.exports = (ts) => { 'concentric spheres overlap' ) + t.equal( + sphere2.collisionArea({ x: 0, y: 0, r: 1 }, { x: 1.5, y: 1.5, r: 1 }), + 0, + 'spheres too far' + ) + t.almostEqual( sphere2.collisionArea({ x: 0, y: 0, r: 1 }, { x: 1, y: 0, r: 1 }), // overlap = 2 * segment From cba31d4fa0c7ee8c4d855985f2ec7085b16c9a86 Mon Sep 17 00:00:00 2001 From: Akseli Palen Date: Sun, 15 Oct 2023 22:00:18 +0300 Subject: [PATCH 7/7] upgrade to yamdog 2.1.0 --- docs/API.md | 240 ++++++++++++++++++++------------------------------- package.json | 2 +- 2 files changed, 95 insertions(+), 147 deletions(-) diff --git a/docs/API.md b/docs/API.md index df93342d..faf86165 100644 --- a/docs/API.md +++ b/docs/API.md @@ -534,15 +534,11 @@ Source: [getPath.js](https://github.com/axelpale/affineplane/blob/main/lib/box2/ Alias of [affineplane.box2.getPath](#affineplanebox2getpath) -Source: [getPath.js](https://github.com/axelpale/affineplane/blob/main/lib/box2/getPath.js) - ## [affineplane](#affineplane).[box2](#affineplanebox2).[getPolygon](#affineplanebox2getpolygon) Alias of [affineplane.box2.getPath](#affineplanebox2getpath) -Source: [getPath.js](https://github.com/axelpale/affineplane/blob/main/lib/box2/getPath.js) - ## [affineplane](#affineplane).[box2](#affineplanebox2).[getSegments](#affineplanebox2getsegments)(box) @@ -584,8 +580,6 @@ Source: [getSize.js](https://github.com/axelpale/affineplane/blob/main/lib/box2/ Alias of [affineplane.box2.getCircle](#affineplanebox2getcircle) -Source: [getCircle.js](https://github.com/axelpale/affineplane/blob/main/lib/box2/getCircle.js) - ## [affineplane](#affineplane).[box2](#affineplanebox2).[hasPoint](#affineplanebox2haspoint)(box, point) @@ -659,8 +653,6 @@ Source: [offset.js](https://github.com/axelpale/affineplane/blob/main/lib/box2/o Alias of [affineplane.box2.projectToPlane](#affineplanebox2projecttoplane) -Source: [projectToPlane.js](https://github.com/axelpale/affineplane/blob/main/lib/box2/projectToPlane.js) - ## [affineplane](#affineplane).[box2](#affineplanebox2).[projectToPlane](#affineplanebox2projecttoplane)(box, target[, camera]) @@ -768,8 +760,6 @@ Source: [rotateBy.js](https://github.com/axelpale/affineplane/blob/main/lib/box2 Alias of [affineplane.box2.homothety](#affineplanebox2homothety) -Source: [homothety.js](https://github.com/axelpale/affineplane/blob/main/lib/box2/homothety.js) - ## [affineplane](#affineplane).[box2](#affineplanebox2).[transitFrom](#affineplanebox2transitfrom)(box, source) @@ -1271,8 +1261,6 @@ Source: [homothety.js](https://github.com/axelpale/affineplane/blob/main/lib/box Alias of [affineplane.box3.projectToPlane](#affineplanebox3projecttoplane) -Source: [projectToPlane.js](https://github.com/axelpale/affineplane/blob/main/lib/box3/projectToPlane.js) - ## [affineplane](#affineplane).[box3](#affineplanebox3).[projectToPlane](#affineplanebox3projecttoplane)(box, target[, camera]) @@ -1390,8 +1378,6 @@ Source: [rotateBy.js](https://github.com/axelpale/affineplane/blob/main/lib/box3 Alias of [affineplane.box3.homothety](#affineplanebox3homothety) -Source: [homothety.js](https://github.com/axelpale/affineplane/blob/main/lib/box3/homothety.js) - ## [affineplane](#affineplane).[box3](#affineplanebox3).[transitFrom](#affineplanebox3transitfrom)(box, source) @@ -1503,8 +1489,6 @@ Source: [validate.js](https://github.com/axelpale/affineplane/blob/main/lib/box3 Alias of [affineplane.sphere2](#affineplanesphere2) -Source: [sphere2/index.js](https://github.com/axelpale/affineplane/blob/main/lib/sphere2/index.js) - ## [affineplane](#affineplane).[circle3](#affineplanecircle3) @@ -1661,8 +1645,6 @@ Source: [collide.js](https://github.com/axelpale/affineplane/blob/main/lib/circl Alias of [affineplane.circle3.collide](#affineplanecircle3collide) -Source: [collide.js](https://github.com/axelpale/affineplane/blob/main/lib/circle3/collide.js) - ## [affineplane](#affineplane).[circle3](#affineplanecircle3).[collideSegment](#affineplanecircle3collidesegment)(c, seg) @@ -1827,8 +1809,6 @@ Source: [polarOffset.js](https://github.com/axelpale/affineplane/blob/main/lib/c Alias of [affineplane.circle3.projectToPlane](#affineplanecircle3projecttoplane) -Source: [projectToPlane.js](https://github.com/axelpale/affineplane/blob/main/lib/circle3/projectToPlane.js) - ## [affineplane](#affineplane).[circle3](#affineplanecircle3).[projectToPlane](#affineplanecircle3projecttoplane)(circle, plane[, camera]) @@ -1883,8 +1863,6 @@ Source: [rotateBy.js](https://github.com/axelpale/affineplane/blob/main/lib/circ Alias of [affineplane.circle3.homothety](#affineplanecircle3homothety) -Source: [homothety.js](https://github.com/axelpale/affineplane/blob/main/lib/circle3/homothety.js) - ## [affineplane](#affineplane).[circle3](#affineplanecircle3).[size](#affineplanecircle3size)(c) @@ -2037,8 +2015,6 @@ Source: [copy.js](https://github.com/axelpale/affineplane/blob/main/lib/dir2/cop Alias of [affineplane.dir2.fromPolar](#affineplanedir2frompolar) -Source: [fromPolar.js](https://github.com/axelpale/affineplane/blob/main/lib/dir2/fromPolar.js) - ## [affineplane](#affineplane).[dir2](#affineplanedir2).[fromPolar](#affineplanedir2frompolar)(r) @@ -2085,8 +2061,6 @@ Source: [fromVector.js](https://github.com/axelpale/affineplane/blob/main/lib/di Alias of [affineplane.dir2.projectToPlane](#affineplanedir2projecttoplane) -Source: [projectToPlane.js](https://github.com/axelpale/affineplane/blob/main/lib/dir2/projectToPlane.js) - ## [affineplane](#affineplane).[dir2](#affineplanedir2).[projectToPlane](#affineplanedir2projecttoplane)(dir, plane) @@ -2115,8 +2089,6 @@ Source: [projectToPlane.js](https://github.com/axelpale/affineplane/blob/main/li Alias of [affineplane.dir2.toPolar](#affineplanedir2topolar) -Source: [toPolar.js](https://github.com/axelpale/affineplane/blob/main/lib/dir2/toPolar.js) - ## [affineplane](#affineplane).[dir2](#affineplanedir2).[toPolar](#affineplanedir2topolar)(dir) @@ -2320,8 +2292,6 @@ Source: [copy.js](https://github.com/axelpale/affineplane/blob/main/lib/dir3/cop Alias of [affineplane.dir3.fromSpherical](#affineplanedir3fromspherical) -Source: [fromSpherical.js](https://github.com/axelpale/affineplane/blob/main/lib/dir3/fromSpherical.js) - ## [affineplane](#affineplane).[dir3](#affineplanedir3).[fromSpherical](#affineplanedir3fromspherical)(theta, phi) @@ -2388,8 +2358,6 @@ Source: [fromVector.js](https://github.com/axelpale/affineplane/blob/main/lib/di Alias of [affineplane.dir3.projectToPlane](#affineplanedir3projecttoplane) -Source: [projectToPlane.js](https://github.com/axelpale/affineplane/blob/main/lib/dir3/projectToPlane.js) - ## [affineplane](#affineplane).[dir3](#affineplanedir3).[projectToPlane](#affineplanedir3projecttoplane)(dir, plane) @@ -2619,8 +2587,6 @@ Source: [equal.js](https://github.com/axelpale/affineplane/blob/main/lib/dist2/e Alias of [affineplane.dist2.projectToPlane](#affineplanedist2projecttoplane) -Source: [projectToPlane.js](https://github.com/axelpale/affineplane/blob/main/lib/dist2/projectToPlane.js) - ## [affineplane](#affineplane).[dist2](#affineplanedist2).[projectToPlane](#affineplanedist2projecttoplane)(dist, target[, camera]) @@ -2801,8 +2767,6 @@ Source: [equal.js](https://github.com/axelpale/affineplane/blob/main/lib/dist3/e Alias of [affineplane.dist3.projectToPlane](#affineplanedist3projecttoplane) -Source: [projectToPlane.js](https://github.com/axelpale/affineplane/blob/main/lib/dist3/projectToPlane.js) - ## [affineplane](#affineplane).[dist3](#affineplanedist3).[projectToPlane](#affineplanedist3projecttoplane)(dist, target[, camera]) @@ -3046,22 +3010,16 @@ Source: [almostEqual.js](https://github.com/axelpale/affineplane/blob/main/lib/h Alias of [affineplane.helm2.almostEqual](#affineplanehelm2almostequal) -Source: [almostEqual.js](https://github.com/axelpale/affineplane/blob/main/lib/helm2/almostEqual.js) - ## [affineplane](#affineplane).[helm2](#affineplanehelm2).[clone](#affineplanehelm2clone) Alias of [affineplane.helm2.copy](#affineplanehelm2copy) -Source: [copy.js](https://github.com/axelpale/affineplane/blob/main/lib/helm2/copy.js) - ## [affineplane](#affineplane).[helm2](#affineplanehelm2).[combine](#affineplanehelm2combine) Alias of [affineplane.helm2.compose](#affineplanehelm2compose) -Source: [compose.js](https://github.com/axelpale/affineplane/blob/main/lib/helm2/compose.js) - ## [affineplane](#affineplane).[helm2](#affineplanehelm2).[compose](#affineplanehelm2compose)(tr, ts) @@ -3156,8 +3114,6 @@ Source: [det.js](https://github.com/axelpale/affineplane/blob/main/lib/helm2/det Alias of [affineplane.helm2.det](#affineplanehelm2det) -Source: [det.js](https://github.com/axelpale/affineplane/blob/main/lib/helm2/det.js) - ## [affineplane](#affineplane).[helm2](#affineplanehelm2).[equal](#affineplanehelm2equal)(tr, ts) @@ -3188,8 +3144,6 @@ Source: [equal.js](https://github.com/axelpale/affineplane/blob/main/lib/helm2/e Alias of [affineplane.helm2.equal](#affineplanehelm2equal) -Source: [equal.js](https://github.com/axelpale/affineplane/blob/main/lib/helm2/equal.js) - ## [affineplane](#affineplane).[helm2](#affineplanehelm2).[fromArray](#affineplanehelm2fromarray)(abxy) @@ -3367,8 +3321,6 @@ Source: [getRotation.js](https://github.com/axelpale/affineplane/blob/main/lib/h Alias of [affineplane.helm2.getDilation](#affineplanehelm2getdilation) -Source: [getDilation.js](https://github.com/axelpale/affineplane/blob/main/lib/helm2/getDilation.js) - ## [affineplane](#affineplane).[helm2](#affineplanehelm2).[getTranslation](#affineplanehelm2gettranslation)(tr) @@ -3392,8 +3344,6 @@ Source: [getTranslation.js](https://github.com/axelpale/affineplane/blob/main/li Alias of [affineplane.helm2.invert](#affineplanehelm2invert) -Source: [invert.js](https://github.com/axelpale/affineplane/blob/main/lib/helm2/invert.js) - ## [affineplane](#affineplane).[helm2](#affineplanehelm2).[invert](#affineplanehelm2invert)(tr) @@ -3443,15 +3393,11 @@ Source: [limitDilation.js](https://github.com/axelpale/affineplane/blob/main/lib Alias of [affineplane.helm2.compose](#affineplanehelm2compose) -Source: [compose.js](https://github.com/axelpale/affineplane/blob/main/lib/helm2/compose.js) - ## [affineplane](#affineplane).[helm2](#affineplanehelm2).[projectTo](#affineplanehelm2projectto) Alias of [affineplane.helm2.projectToPlane](#affineplanehelm2projecttoplane) -Source: [projectToPlane.js](https://github.com/axelpale/affineplane/blob/main/lib/helm2/projectToPlane.js) - ## [affineplane](#affineplane).[helm2](#affineplanehelm2).[projectToCameraTransform](#affineplanehelm2projecttocameratransform)(helm, origin, camera) @@ -3988,22 +3934,16 @@ Source: [almostEqual.js](https://github.com/axelpale/affineplane/blob/main/lib/h Alias of [affineplane.helm3.almostEqual](#affineplanehelm3almostequal) -Source: [almostEqual.js](https://github.com/axelpale/affineplane/blob/main/lib/helm3/almostEqual.js) - ## [affineplane](#affineplane).[helm3](#affineplanehelm3).[clone](#affineplanehelm3clone) Alias of [affineplane.helm3.copy](#affineplanehelm3copy) -Source: [copy.js](https://github.com/axelpale/affineplane/blob/main/lib/helm3/copy.js) - ## [affineplane](#affineplane).[helm3](#affineplanehelm3).[combine](#affineplanehelm3combine) Alias of [affineplane.helm3.compose](#affineplanehelm3compose) -Source: [compose.js](https://github.com/axelpale/affineplane/blob/main/lib/helm3/compose.js) - ## [affineplane](#affineplane).[helm3](#affineplanehelm3).[compose](#affineplanehelm3compose)(tr, ts) @@ -4101,8 +4041,6 @@ Source: [det.js](https://github.com/axelpale/affineplane/blob/main/lib/helm3/det Alias of [affineplane.helm3.det](#affineplanehelm3det) -Source: [det.js](https://github.com/axelpale/affineplane/blob/main/lib/helm3/det.js) - ## [affineplane](#affineplane).[helm3](#affineplanehelm3).[difference](#affineplanehelm3difference)(h, hh) @@ -4155,8 +4093,6 @@ Source: [equal.js](https://github.com/axelpale/affineplane/blob/main/lib/helm3/e Alias of [affineplane.helm3.equal](#affineplanehelm3equal) -Source: [equal.js](https://github.com/axelpale/affineplane/blob/main/lib/helm3/equal.js) - ## [affineplane](#affineplane).[helm3](#affineplanehelm3).[fromArray](#affineplanehelm3fromarray)(arr) @@ -4307,8 +4243,6 @@ Source: [getRotation.js](https://github.com/axelpale/affineplane/blob/main/lib/h Alias of [affineplane.helm3.getDilation](#affineplanehelm3getdilation) -Source: [getDilation.js](https://github.com/axelpale/affineplane/blob/main/lib/helm3/getDilation.js) - ## [affineplane](#affineplane).[helm3](#affineplanehelm3).[getTranslation](#affineplanehelm3gettranslation)(tr) @@ -4332,8 +4266,6 @@ Source: [getTranslation.js](https://github.com/axelpale/affineplane/blob/main/li Alias of [affineplane.helm3.invert](#affineplanehelm3invert) -Source: [invert.js](https://github.com/axelpale/affineplane/blob/main/lib/helm3/invert.js) - ## [affineplane](#affineplane).[helm3](#affineplanehelm3).[invert](#affineplanehelm3invert)(tr) @@ -4383,8 +4315,6 @@ Source: [limitDilation.js](https://github.com/axelpale/affineplane/blob/main/lib Alias of [affineplane.helm3.projectToPlane](#affineplanehelm3projecttoplane) -Source: [projectToPlane.js](https://github.com/axelpale/affineplane/blob/main/lib/helm3/projectToPlane.js) - ## [affineplane](#affineplane).[helm3](#affineplanehelm3).[projectToPlane](#affineplanehelm3projecttoplane)(tr, plane) @@ -4622,8 +4552,6 @@ Source: [transitTo.js](https://github.com/axelpale/affineplane/blob/main/lib/hel Alias of [affineplane.helm3.addTranslation](#affineplanehelm3addtranslation) -Source: [addTranslation.js](https://github.com/axelpale/affineplane/blob/main/lib/helm3/addTranslation.js) - ## [affineplane](#affineplane).[helm3](#affineplanehelm3).[validate](#affineplanehelm3validate)(tr) @@ -4931,6 +4859,8 @@ Orientation in 2D. Represented by an object `{ a, b }`. - [affineplane.orient2.almostEqual](#affineplaneorient2almostequal) - [affineplane.orient2.create](#affineplaneorient2create) +- [affineplane.orient2.fromPolar](#affineplaneorient2frompolar) +- [affineplane.orient2.fromVector](#affineplaneorient2fromvector) - [affineplane.orient2.transitFrom](#affineplaneorient2transitfrom) - [affineplane.orient2.transitTo](#affineplaneorient2transitto) - [affineplane.orient2.validate](#affineplaneorient2validate) @@ -4978,6 +4908,33 @@ Source: [almostEqual.js](https://github.com/axelpale/affineplane/blob/main/lib/o Source: [create.js](https://github.com/axelpale/affineplane/blob/main/lib/orient2/create.js) + +## [affineplane](#affineplane).[orient2](#affineplaneorient2).[fromPolar](#affineplaneorient2frompolar)(direction) + +Create an orientation from angle or vector. + +

Parameters:

+ +- *direction* + - a number, the azimuth angle in radians. + - a [dir2](#affineplanedir2) + - a [vec2](#affineplanevec2) + + +

Returns:

+ +- an [orient2](#affineplaneorient2) + + +Aliases: [affineplane.orient2.fromVector](#affineplaneorient2fromvector) + +Source: [fromPolar.js](https://github.com/axelpale/affineplane/blob/main/lib/orient2/fromPolar.js) + + +## [affineplane](#affineplane).[orient2](#affineplaneorient2).[fromVector](#affineplaneorient2fromvector)(vec) + +Alias of [affineplane.orient2.fromPolar](#affineplaneorient2frompolar) + ## [affineplane](#affineplane).[orient2](#affineplaneorient2).[transitFrom](#affineplaneorient2transitfrom)(r, source) @@ -5225,8 +5182,6 @@ Source: [create.js](https://github.com/axelpale/affineplane/blob/main/lib/path3/ Alias of [affineplane.path3.projectToPlane](#affineplanepath3projecttoplane) -Source: [projectToPlane.js](https://github.com/axelpale/affineplane/blob/main/lib/path3/projectToPlane.js) - ## [affineplane](#affineplane).[path3](#affineplanepath3).[projectToPlane](#affineplanepath3projecttoplane)(path, plane[, camera]) @@ -5432,8 +5387,6 @@ Source: [at.js](https://github.com/axelpale/affineplane/blob/main/lib/plane2/at. Alias of [affineplane.plane2.difference](#affineplaneplane2difference) -Source: [difference.js](https://github.com/axelpale/affineplane/blob/main/lib/plane2/difference.js) - ## [affineplane](#affineplane).[plane2](#affineplaneplane2).[compose](#affineplaneplane2compose)(planea, planeb) @@ -5670,8 +5623,6 @@ Source: [orientation.js](https://github.com/axelpale/affineplane/blob/main/lib/p Alias of [affineplane.plane2.projectToPlane](#affineplaneplane2projecttoplane) -Source: [projectToPlane.js](https://github.com/axelpale/affineplane/blob/main/lib/plane2/projectToPlane.js) - ## [affineplane](#affineplane).[plane2](#affineplaneplane2).[projectToPlane](#affineplaneplane2projecttoplane)(plane, target[, camera]) @@ -6087,8 +6038,6 @@ Source: [at.js](https://github.com/axelpale/affineplane/blob/main/lib/plane3/at. Alias of [affineplane.plane3.difference](#affineplaneplane3difference) -Source: [difference.js](https://github.com/axelpale/affineplane/blob/main/lib/plane3/difference.js) - ## [affineplane](#affineplane).[plane3](#affineplaneplane3).[compose](#affineplaneplane3compose)(planea, planeb) @@ -6372,8 +6321,6 @@ Source: [projectByDepth.js](https://github.com/axelpale/affineplane/blob/main/li Alias of [affineplane.plane3.projectToPlane](#affineplaneplane3projecttoplane) -Source: [projectToPlane.js](https://github.com/axelpale/affineplane/blob/main/lib/plane3/projectToPlane.js) - ## [affineplane](#affineplane).[plane3](#affineplaneplane3).[projectToDepth](#affineplaneplane3projecttodepth)(plane, depth, camera) @@ -6608,8 +6555,6 @@ Source: [transform.js](https://github.com/axelpale/affineplane/blob/main/lib/pla Alias of [affineplane.plane3.transform](#affineplaneplane3transform) -Source: [transform.js](https://github.com/axelpale/affineplane/blob/main/lib/plane3/transform.js) - ## [affineplane](#affineplane).[plane3](#affineplaneplane3).[transformInside](#affineplaneplane3transforminside)(plane, tr[, origin]) @@ -6865,15 +6810,11 @@ Source: [create.js](https://github.com/axelpale/affineplane/blob/main/lib/point2 Alias of [affineplane.point2.difference](#affineplanepoint2difference) -Source: [difference.js](https://github.com/axelpale/affineplane/blob/main/lib/point2/difference.js) - ## [affineplane](#affineplane).[point2](#affineplanepoint2).[diff](#affineplanepoint2diff) Alias of [affineplane.point2.difference](#affineplanepoint2difference) -Source: [difference.js](https://github.com/axelpale/affineplane/blob/main/lib/point2/difference.js) - ## [affineplane](#affineplane).[point2](#affineplanepoint2).[difference](#affineplanepoint2difference)(p, q) @@ -6963,8 +6904,6 @@ Source: [equal.js](https://github.com/axelpale/affineplane/blob/main/lib/point2/ Alias of [affineplane.point2.equal](#affineplanepoint2equal) -Source: [equal.js](https://github.com/axelpale/affineplane/blob/main/lib/point2/equal.js) - ## [affineplane](#affineplane).[point2](#affineplanepoint2).[fromArray](#affineplanepoint2fromarray)(arrp) @@ -7010,15 +6949,11 @@ Source: [homothety.js](https://github.com/axelpale/affineplane/blob/main/lib/poi Alias of [affineplane.point2.average](#affineplanepoint2average) -Source: [average.js](https://github.com/axelpale/affineplane/blob/main/lib/point2/average.js) - ## [affineplane](#affineplane).[point2](#affineplanepoint2).[move](#affineplanepoint2move) Alias of [affineplane.point2.translate](#affineplanepoint2translate) -Source: [translate.js](https://github.com/axelpale/affineplane/blob/main/lib/point2/translate.js) - ## [affineplane](#affineplane).[point2](#affineplanepoint2).[offset](#affineplanepoint2offset)(p, dx, dy) @@ -7092,8 +7027,6 @@ Source: [projectByDistance.js](https://github.com/axelpale/affineplane/blob/main Alias of [affineplane.point2.projectToPlane](#affineplanepoint2projecttoplane) -Source: [projectToPlane.js](https://github.com/axelpale/affineplane/blob/main/lib/point2/projectToPlane.js) - ## [affineplane](#affineplane).[point2](#affineplanepoint2).[projectToLine](#affineplanepoint2projecttoline)(p, line) @@ -7310,8 +7243,6 @@ Source: [validate.js](https://github.com/axelpale/affineplane/blob/main/lib/poin Alias of [affineplane.point2.difference](#affineplanepoint2difference) -Source: [difference.js](https://github.com/axelpale/affineplane/blob/main/lib/point2/difference.js) - ## [affineplane](#affineplane).[point3](#affineplanepoint3) @@ -7438,15 +7369,11 @@ Source: [create.js](https://github.com/axelpale/affineplane/blob/main/lib/point3 Alias of [affineplane.point3.difference](#affineplanepoint3difference) -Source: [difference.js](https://github.com/axelpale/affineplane/blob/main/lib/point3/difference.js) - ## [affineplane](#affineplane).[point3](#affineplanepoint3).[diff](#affineplanepoint3diff) Alias of [affineplane.point3.difference](#affineplanepoint3difference) -Source: [difference.js](https://github.com/axelpale/affineplane/blob/main/lib/point3/difference.js) - ## [affineplane](#affineplane).[point3](#affineplanepoint3).[difference](#affineplanepoint3difference)(p, q) @@ -7601,8 +7528,6 @@ Source: [equal.js](https://github.com/axelpale/affineplane/blob/main/lib/point3/ Alias of [affineplane.point3.equal](#affineplanepoint3equal) -Source: [equal.js](https://github.com/axelpale/affineplane/blob/main/lib/point3/equal.js) - ## [affineplane](#affineplane).[point3](#affineplanepoint3).[fromArray](#affineplanepoint3fromarray)(arrp) @@ -7648,8 +7573,6 @@ Source: [homothety.js](https://github.com/axelpale/affineplane/blob/main/lib/poi Alias of [affineplane.point3.average](#affineplanepoint3average) -Source: [average.js](https://github.com/axelpale/affineplane/blob/main/lib/point3/average.js) - ## [affineplane](#affineplane).[point3](#affineplanepoint3).[offset](#affineplanepoint3offset)(p, dx, dy, dz) @@ -7728,8 +7651,6 @@ Source: [projectByDistance.js](https://github.com/axelpale/affineplane/blob/main Alias of [affineplane.point3.projectToPlane](#affineplanepoint3projecttoplane) -Source: [projectToPlane.js](https://github.com/axelpale/affineplane/blob/main/lib/point3/projectToPlane.js) - ## [affineplane](#affineplane).[point3](#affineplanepoint3).[projectToPlane](#affineplanepoint3projecttoplane)(point, plane[, camera]) @@ -7907,8 +7828,6 @@ Source: [translate.js](https://github.com/axelpale/affineplane/blob/main/lib/poi Alias of [affineplane.point3.translate](#affineplanepoint3translate) -Source: [translate.js](https://github.com/axelpale/affineplane/blob/main/lib/point3/translate.js) - ## [affineplane](#affineplane).[point3](#affineplanepoint3).[validate](#affineplanepoint3validate)(p) @@ -7933,8 +7852,6 @@ Source: [validate.js](https://github.com/axelpale/affineplane/blob/main/lib/poin Alias of [affineplane.point3.difference](#affineplanepoint3difference) -Source: [difference.js](https://github.com/axelpale/affineplane/blob/main/lib/point3/difference.js) - ## [affineplane](#affineplane).[poly2](#affineplanepoly2) @@ -8057,8 +7974,6 @@ Source: [create.js](https://github.com/axelpale/affineplane/blob/main/lib/quat4/ Alias of [affineplane.quat4.difference](#affineplanequat4difference) -Source: [difference.js](https://github.com/axelpale/affineplane/blob/main/lib/quat4/difference.js) - ## [affineplane](#affineplane).[quat4](#affineplanequat4).[difference](#affineplanequat4difference)(q, p) @@ -8149,8 +8064,6 @@ Source: [hamilton.js](https://github.com/axelpale/affineplane/blob/main/lib/quat Alias of [affineplane.quat4.hamilton](#affineplanequat4hamilton) -Source: [hamilton.js](https://github.com/axelpale/affineplane/blob/main/lib/quat4/hamilton.js) - ## [affineplane](#affineplane).[quat4](#affineplanequat4).[norm](#affineplanequat4norm)(q) @@ -8403,8 +8316,6 @@ Source: [invert.js](https://github.com/axelpale/affineplane/blob/main/lib/ray3/i Alias of [affineplane.ray3.invert](#affineplaneray3invert) -Source: [invert.js](https://github.com/axelpale/affineplane/blob/main/lib/ray3/invert.js) - ## [affineplane](#affineplane).[ray3](#affineplaneray3).[offset](#affineplaneray3offset)(ray, dx, dy, dz) @@ -9969,8 +9880,10 @@ Aliases: [affineplane.circle2](#affineplanecircle2) - [affineplane.sphere2.boundingBox](#affineplanesphere2boundingbox) - [affineplane.sphere2.boundingCircle](#affineplanesphere2boundingcircle) - [affineplane.sphere2.collide](#affineplanesphere2collide) +- [affineplane.sphere2.collisionArea](#affineplanesphere2collisionarea) - [affineplane.sphere2.copy](#affineplanesphere2copy) - [affineplane.sphere2.create](#affineplanesphere2create) +- [affineplane.sphere2.fromPoints](#affineplanesphere2frompoints) - [affineplane.sphere2.gap](#affineplanesphere2gap) - [affineplane.sphere2.hasPoint](#affineplanesphere2haspoint) - [affineplane.sphere2.homothety](#affineplanesphere2homothety) @@ -10116,6 +10029,26 @@ Detect collision between two spheres. Source: [collide.js](https://github.com/axelpale/affineplane/blob/main/lib/sphere2/collide.js) + +## [affineplane](#affineplane).[sphere2](#affineplanesphere2).[collisionArea](#affineplanesphere2collisionarea)(c, cc) + +Compute collision area between two spheres. + +

Parameters:

+ +- *c* + - a [sphere2](#affineplanesphere2) +- *cc* + - a [sphere2](#affineplanesphere2) + + +

Returns:

+ +- a [scalar2](#affineplanescalar2), number, the area. + + +Source: [collisionArea.js](https://github.com/axelpale/affineplane/blob/main/lib/sphere2/collisionArea.js) + ## [affineplane](#affineplane).[sphere2](#affineplanesphere2).[copy](#affineplanesphere2copy)(p) @@ -10156,6 +10089,27 @@ Create a [sphere2](#affineplanesphere2) object. Source: [create.js](https://github.com/axelpale/affineplane/blob/main/lib/sphere2/create.js) + +## [affineplane](#affineplane).[sphere2](#affineplanesphere2).[fromPoints](#affineplanesphere2frompoints)(p, q) + +Create a [sphere2](#affineplanesphere2) from two points, +the origin p and the circumference point q. + +

Parameters:

+ +- *p* + - a [point2](#affineplanepoint2), at the circle center. +- *q* + - a [point2](#affineplanepoint2), on the circle circumference. + + +

Returns:

+ +- a [sphere2](#affineplanesphere2) + + +Source: [fromPoints.js](https://github.com/axelpale/affineplane/blob/main/lib/sphere2/fromPoints.js) + ## [affineplane](#affineplane).[sphere2](#affineplanesphere2).[gap](#affineplanesphere2gap)(c, cc) @@ -10296,8 +10250,6 @@ Source: [rotateBy.js](https://github.com/axelpale/affineplane/blob/main/lib/sphe Alias of [affineplane.sphere2.homothety](#affineplanesphere2homothety) -Source: [homothety.js](https://github.com/axelpale/affineplane/blob/main/lib/sphere2/homothety.js) - ## [affineplane](#affineplane).[sphere2](#affineplanesphere2).[size](#affineplanesphere2size)(sphere) @@ -10420,6 +10372,7 @@ Represented with an object `{ x, y, z, r }` for the origin and the radius. - [affineplane.sphere3.collide](#affineplanesphere3collide) - [affineplane.sphere3.copy](#affineplanesphere3copy) - [affineplane.sphere3.create](#affineplanesphere3create) +- [affineplane.sphere3.fromPoints](#affineplanesphere3frompoints) - [affineplane.sphere3.gap](#affineplanesphere3gap) - [affineplane.sphere3.hasPoint](#affineplanesphere3haspoint) - [affineplane.sphere3.homothety](#affineplanesphere3homothety) @@ -10612,6 +10565,27 @@ Create a [sphere3](#affineplanesphere3) object. Source: [create.js](https://github.com/axelpale/affineplane/blob/main/lib/sphere3/create.js) + +## [affineplane](#affineplane).[sphere3](#affineplanesphere3).[fromPoints](#affineplanesphere3frompoints)(p, q) + +Create a [sphere3](#affineplanesphere3) from two points, +the origin p and the circumference point q. + +

Parameters:

+ +- *p* + - a [point3](#affineplanepoint3), at the circle center. +- *q* + - a [point3](#affineplanepoint3), on the circle circumference. + + +

Returns:

+ +- a [sphere3](#affineplanesphere3) + + +Source: [fromPoints.js](https://github.com/axelpale/affineplane/blob/main/lib/sphere3/fromPoints.js) + ## [affineplane](#affineplane).[sphere3](#affineplanesphere3).[gap](#affineplanesphere3gap)(c, cc) @@ -10734,8 +10708,6 @@ Source: [polarOffset.js](https://github.com/axelpale/affineplane/blob/main/lib/s Alias of [affineplane.sphere3.projectToPlane](#affineplanesphere3projecttoplane) -Source: [projectToPlane.js](https://github.com/axelpale/affineplane/blob/main/lib/sphere3/projectToPlane.js) - ## [affineplane](#affineplane).[sphere3](#affineplanesphere3).[projectToPlane](#affineplanesphere3projecttoplane)(sphere, plane[, camera]) @@ -10812,8 +10784,6 @@ Source: [rotateBy.js](https://github.com/axelpale/affineplane/blob/main/lib/sphe Alias of [affineplane.sphere3.homothety](#affineplanesphere3homothety) -Source: [homothety.js](https://github.com/axelpale/affineplane/blob/main/lib/sphere3/homothety.js) - ## [affineplane](#affineplane).[sphere3](#affineplanesphere3).[size](#affineplanesphere3size)(sphere) @@ -11343,8 +11313,6 @@ Source: [max.js](https://github.com/axelpale/affineplane/blob/main/lib/vec2/max. Alias of [affineplane.vec2.average](#affineplanevec2average) -Source: [average.js](https://github.com/axelpale/affineplane/blob/main/lib/vec2/average.js) - ## [affineplane](#affineplane).[vec2](#affineplanevec2).[min](#affineplanevec2min)(v, w) @@ -11370,29 +11338,21 @@ Source: [min.js](https://github.com/axelpale/affineplane/blob/main/lib/vec2/min. Alias of [affineplane.vec2.invert](#affineplanevec2invert) -Source: [invert.js](https://github.com/axelpale/affineplane/blob/main/lib/vec2/invert.js) - ## [affineplane](#affineplane).[vec2](#affineplanevec2).[norm](#affineplanevec2norm) Alias of [affineplane.vec2.magnitude](#affineplanevec2magnitude) -Source: [magnitude.js](https://github.com/axelpale/affineplane/blob/main/lib/vec2/magnitude.js) - ## [affineplane](#affineplane).[vec2](#affineplanevec2).[normalize](#affineplanevec2normalize) Alias of [affineplane.vec2.unit](#affineplanevec2unit) -Source: [unit.js](https://github.com/axelpale/affineplane/blob/main/lib/vec2/unit.js) - ## [affineplane](#affineplane).[vec2](#affineplanevec2).[projectTo](#affineplanevec2projectto) Alias of [affineplane.vec2.projectToPlane](#affineplanevec2projecttoplane) -Source: [projectToPlane.js](https://github.com/axelpale/affineplane/blob/main/lib/vec2/projectToPlane.js) - ## [affineplane](#affineplane).[vec2](#affineplanevec2).[projectToPlane](#affineplanevec2projecttoplane)(v, plane[, camera]) @@ -11871,8 +11831,6 @@ Source: [cross.js](https://github.com/axelpale/affineplane/blob/main/lib/vec3/cr Alias of [affineplane.vec3.difference](#affineplanevec3difference) -Source: [difference.js](https://github.com/axelpale/affineplane/blob/main/lib/vec3/difference.js) - ## [affineplane](#affineplane).[vec3](#affineplanevec3).[difference](#affineplanevec3difference)(v, w) @@ -12096,29 +12054,21 @@ Source: [magnitude.js](https://github.com/axelpale/affineplane/blob/main/lib/vec Alias of [affineplane.vec3.invert](#affineplanevec3invert) -Source: [invert.js](https://github.com/axelpale/affineplane/blob/main/lib/vec3/invert.js) - ## [affineplane](#affineplane).[vec3](#affineplanevec3).[norm](#affineplanevec3norm) Alias of [affineplane.vec3.magnitude](#affineplanevec3magnitude) -Source: [magnitude.js](https://github.com/axelpale/affineplane/blob/main/lib/vec3/magnitude.js) - ## [affineplane](#affineplane).[vec3](#affineplanevec3).[normalize](#affineplanevec3normalize) Alias of [affineplane.vec3.unit](#affineplanevec3unit) -Source: [unit.js](https://github.com/axelpale/affineplane/blob/main/lib/vec3/unit.js) - ## [affineplane](#affineplane).[vec3](#affineplanevec3).[projectTo](#affineplanevec3projectto) Alias of [affineplane.vec3.projectToPlane](#affineplanevec3projecttoplane) -Source: [projectToPlane.js](https://github.com/axelpale/affineplane/blob/main/lib/vec3/projectToPlane.js) - ## [affineplane](#affineplane).[vec3](#affineplanevec3).[projectToPlane](#affineplanevec3projecttoplane)(vec, plane[, position, camera]) @@ -12295,8 +12245,6 @@ Source: [scaleTo.js](https://github.com/axelpale/affineplane/blob/main/lib/vec3/ Alias of [affineplane.vec3.difference](#affineplanevec3difference) -Source: [difference.js](https://github.com/axelpale/affineplane/blob/main/lib/vec3/difference.js) - ## [affineplane](#affineplane).[vec3](#affineplanevec3).[sum](#affineplanevec3sum)(vs) diff --git a/package.json b/package.json index b4df288c..1cd4dffb 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "standard": "^17.0.0", "tap-arc": "^0.3.5", "tape": "^5.6.3", - "yamdog": "^2.0.0" + "yamdog": "^2.1.0" }, "scripts": { "lint": "standard index.js 'lib/**/*.js' 'test/**/*.js'",