Take the shoulder off the bench's feet
Reported twice. The first time I planed the through-tenons from 42 mm proud to
3 and called it done, which answered the tenons rather than the question — the
tenons were never it. Measured again now: nothing stands more than 3.9 mm above
the seat at any slider setting, and the thing that was catching was on the
LEGS.
The leg board widens on the way down; that is the splay. The two feet, cut out
of its bottom edge by the arch, were built at `footWidth` — the board's width
at the FLOOR. But a foot starts at the top of the arch, a third of the way up,
where the board has not widened that far yet. So every foot stood proud of the
board it hangs from, on both sides, as a hard shoulder at shin height: 14 mm by
default, 20 mm on a wide bench, 32 mm at full splay. Setting the splay to zero
made it vanish, which is what finally named the cause.
The leg's outer edge is a straight line from `footWidth / 2` at the floor to
`legWidth / 2` under the seat, and a foot's outer face has to lie ON that line
rather than run vertically up from its own base. A tapered box narrows about
its centre, so taking twice the taper off the top width moves the outer face in
by exactly the taper — and moves the inner face out by the same, narrowing the
arch as it rises, which is also what a splayed leg does. 14.2 mm becomes 0.2,
32.3 becomes 0.4, and 0.2 mm is the sampling resolution rather than a step.
`scripts/probe-bench.ts` is how it was found and it took two wrong versions to
get there, both failing the same way — by measuring something and reporting a
number that was not the answer:
- The first sampled vertices into height bands. A tapered box has corners
only at its top and bottom, so the bands between them came out empty, were
skipped, and it reported a confident 0.0 mm step for a leg with a 17 mm
shoulder on it. It now slices the actual triangles, which gives a width at
any height whether a corner is there or not.
- The second scanned the full height of the leg part and found its biggest
drop at 86% — exactly where the board ends and only the tenon carries on
into the seat. That is what a tenon IS. A real fault of 14 mm was sitting
underneath a 66 mm reading that was not a fault at all, so the scan now
stops at the seat's underside.
Both media images regenerated, since the bench is in each of them.
This commit is contained in:
parent
a48431ca9c
commit
30c7c4863a
6 changed files with 199 additions and 5 deletions
|
|
@ -122,10 +122,34 @@ export function createModel(overrides: Partial<WoodenBenchConfig> = {}) {
|
|||
// so the joint is an overlap rather than two faces meeting.
|
||||
const footThickness = footWidth * 0.3
|
||||
const footRise = archHeight + legHeight * 0.07
|
||||
|
||||
/**
|
||||
* Each foot narrows on the way UP by exactly the board's own taper.
|
||||
*
|
||||
* This is the protrusion, and it was reported twice before I found it:
|
||||
* the first time I planed the through-tenons and answered the wrong
|
||||
* question. The feet were built at `footWidth`, the board's width at
|
||||
* the GROUND -- but a foot starts at the top of the arch, a third of
|
||||
* the way up, where the board has not widened that far yet. So every
|
||||
* foot stood proud of the board it hangs from, on both sides, as a
|
||||
* hard shoulder at shin height: 14 mm by default and 32 mm at full
|
||||
* splay. Setting the splay to zero made it vanish, which is what
|
||||
* finally named the cause.
|
||||
*
|
||||
* The leg's outer edge is a straight line from `footWidth / 2` at the
|
||||
* floor to `legWidth / 2` under the seat, and the foot's outer face
|
||||
* has to lie ON that line rather than run vertically up from its foot.
|
||||
* A tapered box narrows about its own centre, so taking twice the
|
||||
* taper off the top width moves the outer face in by exactly the taper
|
||||
* -- and moves the inner face out by the same, which narrows the arch
|
||||
* as it rises, which is also what a splayed leg does.
|
||||
*/
|
||||
const footTaper = spread * (footRise / legHeight)
|
||||
const footTop = Math.max(footThickness * 0.3, footThickness - footTaper * 2)
|
||||
for (const foot of [-1, 1]) {
|
||||
legPieces.push(taperedBoxGeometry(
|
||||
[footThickness, timber * 1.35],
|
||||
[footThickness * 0.92, timber * 1.35],
|
||||
[footTop, timber * 1.35],
|
||||
footRise,
|
||||
[
|
||||
side * legX + foot * (footWidth - footThickness) / 2,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue