I was inspired by the "Impossible Cube" and wanted to apply similar ideas to a chair model I had previously been working on. This resulted in the tentative making of an "Impossible Chair."
chair = {
(*seat*){{{-1, 1, 2}, {-1, -1, 2}}, {{-1, -1, 2}, {1, -1,
2}}, {{1, -1, 2}, {1, 1, 2}}, {{1, 1, 2}, {-1, 1, 2}}},
(*sides*){{{-1, 1, 0}, {-1, 1, 2}}, {{-1, -1, 0}, {-1, -1,
2}}, {{1, -1, 0}, {1, -1, 2}}, {{1, 1, 0}, {1, 1, 2}}},
(*back*){{{-1, 1, 4}, {1, 1, 4}}, {{-1, 1, 3}, {1, 1, 3}}, {{-1, 1,
4}, {-1, 1, 2}}, {{1, 1, 4}, {1, 1, 2}}}};
Graphics3D[Map[Tube[#, .1] &, chair], Axes -> True,
AxesOrigin -> {0, 0, 0}, ImageSize -> 250]
I modified the spline curve to allow it to span various points along the side of the chair creating some type of armrest. Additionally, I linked the radius of the spline curve tube to its y-coordinates, making it proportionate to the view distance.
This Manipulate allows for experimentation with the armrest's control points, rotation, and other dimensions. 3 bookmarks demonstrate a few of the many possibilities.
Manipulate[Module[{m = 32, curvePnts, curvePntYs, tubeRadii},
curvePnts =
RotationTransform[-phi, {0, 0, 1}, {1, 1, 0}] /@ {{1, 1, x1}, {1,
1 - h2, x2}, {1, 1 - h3, x3}, {1, 1, x4}};
tubeRadii = (# (rt - rm)/4 + (rt + rm)/2) & /@ curvePnts[[All, 2]];
Graphics3D[{{Opacity[.35], Cylinder[{{0, 0, 0}, {0, 0, -.01}}, 3.5]},
Rotate[{
(*seat*){Brown,
Polygon[{{-1, -1, 2}, {-1, 1, 2}, {1, 1, 2}, {1, -1, 2}}]},
(*chair*){LightBrown, Specularity[White, 20],
Tube[BSplineCurve[curvePnts, tubeRadii]],
Map[Tube[#, rt] &, chair]}}, alpha, {0, 0, 1}]},
ViewPoint -> {2, -2, .75}, ViewAngle -> .33,
Lighting -> {DirectionalLight[Orange, {{5, 5, 4}, {5, -10, 0}}],
DirectionalLight[Orange, {{5, 5, 4}, {5, 5, 0}}],
DirectionalLight[Orange, {{5, 5, 4}, {5, 50, 0}}]},
Boxed -> False]],
"control points armarest BSplineCurve",
{{x1, 0}, None}, {{x2, 1.125}, -2, 4, .001}, {{h2, 2.38}, 0,
6, .001}, {{x3, 3.18}, 0, 4, .001}, {{h3, 4.08}, 0, 6, .001},
{{x4, 2}, 1,
4, .1}, {{rt, .11, "tube radius"}, .075, .25, .001}, {{rm, .09,
"min radius"}, .0, rt, .001}, {{alpha, 1.02, "chair angle"}, -.5,
1.5, .01}, {{phi, 0.26, "armrest angle"}, 0, 1., .001},
Bookmarks -> {"chair-low" :> {h2 = 2.38`, h3 = 4.08`, m = 35,
rm = 0.09, rt = 0.11, x1 = 0, x2 = 1.125`, x3 = 3.18`, x4 = 2,
alpha = 1.02, phi = 0.26},
"chair-mid" :> {h2 = 2.38`, h3 = 3.886`, m = 35, rm = 0.09,
rt = 0.11, x1 = 0, x2 = 1.69`, x3 = 2.368`, x4 = 3, alpha = 1.21,
phi = 0.436`},
"chair-high" :> {h2 = 2.38`, h3 = 6.`, m = 35, rm = 0.09,
rt = 0.11, x1 = 0, x2 = 1.69`, x3 = 2.368`, x4 = 4.`,
alpha = 1.18, phi = 0.411}}]
This video shows a rotating chair with the settings of bookmark "chair-mid".
The images above showcase three examples of the armrest spanning various distances. Perhaps a member of the community can build further and improve upon these ideas. Have fun experimenting...