Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,42 @@
|
|||
const hDist = (p1, p2) => Math.hypot(...p1.map((e, i) => e - p2[i])) / 2;
|
||||
const pAng = (p1, p2) => Math.atan(p1.map((e, i) => e - p2[i]).reduce((p, c) => c / p, 1));
|
||||
const solveF = (p, r) => t => [r*Math.cos(t) + p[0], r*Math.sin(t) + p[1]];
|
||||
const diamPoints = (p1, p2) => p1.map((e, i) => e + (p2[i] - e) / 2);
|
||||
|
||||
const findC = (...args) => {
|
||||
const [p1, p2, s] = args;
|
||||
const solve = solveF(p1, s);
|
||||
const halfDist = hDist(p1, p2);
|
||||
|
||||
let msg = `p1: ${p1}, p2: ${p2}, r:${s} Result: `;
|
||||
switch (Math.sign(s - halfDist)) {
|
||||
case 0:
|
||||
msg += s ? `Points on diameter. Circle at: ${diamPoints(p1, p2)}` :
|
||||
'Radius Zero';
|
||||
break;
|
||||
case 1:
|
||||
if (!halfDist) {
|
||||
msg += 'Coincident point. Infinite solutions';
|
||||
}
|
||||
else {
|
||||
let theta = pAng(p1, p2);
|
||||
let theta2 = Math.acos(halfDist / s);
|
||||
[1, -1].map(e => solve(theta + e * theta2)).forEach(
|
||||
e => msg += `Circle at ${e} `);
|
||||
}
|
||||
break;
|
||||
case -1:
|
||||
msg += 'No intersection. Points further apart than circle diameter';
|
||||
break;
|
||||
}
|
||||
return msg;
|
||||
};
|
||||
|
||||
|
||||
[
|
||||
[[0.1234, 0.9876], [0.8765, 0.2345], 2.0],
|
||||
[[0.0000, 2.0000], [0.0000, 0.0000], 1.0],
|
||||
[[0.1234, 0.9876], [0.1234, 0.9876], 2.0],
|
||||
[[0.1234, 0.9876], [0.8765, 0.2345], 0.5],
|
||||
[[0.1234, 0.9876], [0.1234, 0.9876], 0.0]
|
||||
].forEach((t,i) => console.log(`Test: ${i}: ${findC(...t)}`));
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
Test: 0: p1: 0.1234,0.9876, p2: 0.8765,0.2345, r:2 Result: Circle at 1.8631118016581891,1.974211801658189 Circle at -0.863211801658189,-0.7521118016581889
|
||||
Test: 1: p1: 0,2, p2: 0,0, r:1 Result: Points on diameter. Circle at: 0,1
|
||||
Test: 2: p1: 0.1234,0.9876, p2: 0.1234,0.9876, r:2 Result: Coincident point. Infinite solutions
|
||||
Test: 3: p1: 0.1234,0.9876, p2: 0.8765,0.2345, r:0.5 Result: No intersection. Points further apart than circle diameter
|
||||
Test: 4: p1: 0.1234,0.9876, p2: 0.1234,0.9876, r:0 Result: Radius Zero
|
||||
Loading…
Add table
Add a link
Reference in a new issue