10
|
3088 Views
|
|
10 Total Likes
View groups...
Share
GROUPS:

# Modeling an impossible chair

Posted 1 year ago
 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...