Land the spilled coins, plane the bench's tenons, and sharpen the support check
Three defects reported from looking at the models, and the first of them says something about the check that was supposed to catch it. Every third coin was lifted to "land on top of the previous one" while its position stayed independently scattered, so it was almost never above anything and simply hovered about 3 mm off the ground. A stacking coin now takes the previous coin's PLACE as well as its height. The tilted ones were lifted by half their thickness plus their circumradius; a coin is a nine-sided prism and can come to rest on a face rather than a corner, so the lift uses the apothem and its own radius, erring towards bedding into the ground rather than floating above it. The support check missed all of that, and the reason is worth writing down: its voxel is the model's extent over the resolution, so at 64 a 0.19 m coin pouch gets a 3 mm voxel -- exactly the size of the gap it existed to find. A check coarser than the defect it hunts is worth very little. At 112 the whole suite still runs in fifteen seconds. Raising it immediately turned up a real fault nobody had seen. The log pile's sawn ends were cut to exactly the body's end radius and placed exactly at its rim, so disc and lathe met along a seam of no width: they touched and never overlapped, and there was nothing joining them but two edges in the same place. The caps are now three percent wider and seated slightly inside, which is two millimetres here and true of a real log anyway, since bark wears back from a cut face. And the bench's through-tenons stood 42 mm proud of the seat -- a block of oak the size of a thumb sticking straight up out of the surface you are meant to sit on. A real through-tenon is wedged and then planed back, so what shows is end grain and a hairline of shoulder. Three millimetres proud, ten housed below. 28 models, 20 547 triangles, all checks pass at resolution 112, 0 floating cases, build clean.
This commit is contained in:
parent
2b6e2b4d02
commit
1888616315
8 changed files with 175 additions and 64 deletions
|
|
@ -136,15 +136,27 @@ export function createModel(overrides: Partial<WoodenBenchConfig> = {}) {
|
|||
))
|
||||
}
|
||||
|
||||
// Tenon: the end of the leg that runs THROUGH the seat and shows on
|
||||
// top of it. It overshoots the seat's top face — the most recognisable
|
||||
// detail of a medieval bench.
|
||||
// Tenon: the end of the leg running THROUGH the seat and showing on
|
||||
// top of it as a panel of end grain. It is the most recognisable
|
||||
// detail of a medieval bench -- and it is nearly FLUSH.
|
||||
//
|
||||
// At 1.9 seat thicknesses it stood 42 mm proud of the seat: a block of
|
||||
// oak the size of a thumb sticking straight up out of the surface you
|
||||
// are meant to sit on. A real through-tenon is wedged and then planed
|
||||
// back, so what shows is the grain and a hairline of shoulder, not a
|
||||
// peg. Three millimetres proud, ten millimetres housed below.
|
||||
const proud = seatThickness * 0.05
|
||||
const housed = seatThickness * 0.16
|
||||
legPieces.push(chamferedBoxGeometry(
|
||||
[legWidth * 0.34, timber * 0.85],
|
||||
[legWidth * 0.32, timber * 0.8],
|
||||
seatThickness * 1.9,
|
||||
seatThickness + proud + housed,
|
||||
timber * 0.16,
|
||||
[side * legX, seatBottom + seatThickness * 0.75, jitter(random, timber * 0.1)],
|
||||
[
|
||||
side * legX,
|
||||
seatBottom + (seatThickness + proud - housed) / 2,
|
||||
jitter(random, timber * 0.1),
|
||||
],
|
||||
tint('oak', 0.09),
|
||||
))
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue