kernel-cases: crossing equal holes leave each wall in two faces

ladder/05/011 expected 8 faces (the stock's 6 and one per hole). With equal
radii the two walls cross along two ellipses that meet at the two points
where the walls are tangent (x = 25 and 35, y = 20, z = 10), so each wall is
left in two pieces that touch only at those points, with no edge between
them: separate faces, 10 in all. SMLib makes those 10 (volume exact); truck's
8 came with an invalid record. Derivation in the case's method.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017itGh5fpMEousnZ91cYcVt
This commit is contained in:
jyviko
2026-10-21 23:55:26 -04:00
parent 5df8a55657
commit f10dfd8d06
2 changed files with 8 additions and 4 deletions
@@ -2,8 +2,8 @@
"sources": [],
"what": "two d10 through holes whose axes cross: vertical and along Y at z=10",
"source": "analytic",
"method": "equal radii, crossing axes: the common part is the Steinmetz solid 16 r^3 / 3; removed pi r^2 (20 + 40) - 16 r^3/3",
"method": "equal radii, crossing axes: the common part is the Steinmetz solid 16 r^3 / 3; removed pi r^2 (20 + 40) - 16 r^3/3. Faces: the stock's 6 and two per hole. With equal radii the walls cross along two ellipses that meet at the two points where the walls are tangent (x = 25 and 35, y = 20, z = 10), so each wall is left in two pieces (the vertical one above and below the other hole, the horizontal one either side of the vertical hole) that touch only at those points: no edge joins them, so they are separate faces",
"body_count": 1,
"volume_mm3": 43954.277686282,
"faces": 8
"faces": 10
}
+6 -2
View File
@@ -299,8 +299,12 @@ case(T5, "010-hole-tangent-to-end-face", "a d10 through hole tangent to the end
{"body_count": 1, "volume_mm3": VB - PI * 25 * 20}, "the wall touches x=0 along a line: removed pi 5^2 20, one body", base=B1)
case(T5, "011-crossing-holes-steinmetz", "two d10 through holes whose axes cross: vertical and along Y at z=10",
[H(position=top, diameter=10), H(position=[30, 0, 10], diameter=10)],
{"body_count": 1, "volume_mm3": VB - PI * 25 * 20 - PI * 25 * 40 + 16 * 125 / 3, "faces": 8},
"equal radii, crossing axes: the common part is the Steinmetz solid 16 r^3 / 3; removed pi r^2 (20 + 40) - 16 r^3/3", base=B1)
{"body_count": 1, "volume_mm3": VB - PI * 25 * 20 - PI * 25 * 40 + 16 * 125 / 3, "faces": 10},
"equal radii, crossing axes: the common part is the Steinmetz solid 16 r^3 / 3; removed pi r^2 (20 + 40) - 16 r^3/3. "
"Faces: the stock's 6 and two per hole. With equal radii the walls cross along two ellipses that meet at the two "
"points where the walls are tangent (x = 25 and 35, y = 20, z = 10), so each wall is left in two pieces (the vertical "
"one above and below the other hole, the horizontal one either side of the vertical hole) that touch only at those "
"points: no edge joins them, so they are separate faces", base=B1)
rr, off = 2.5, 2.0
lo, hi = max(-rr, off - rr), min(rr, off + rr)
vx = quad(lambda u: 4 * math.sqrt(max(rr * rr - u * u, 0)) * math.sqrt(max(rr * rr - (u - off) ** 2, 0)), lo, hi, 256)