Message Boards Message Boards

Modeling an impossible chair

Posted 1 year ago

enter image description here

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]

enter image description here

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.

enter image description here

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}}]

enter image description here

This video shows a rotating chair with the settings of bookmark "chair-mid".

enter image description here

enter image description here

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...

POSTED BY: Erik Mahieu

enter image description here -- you have earned Featured Contributor Badge enter image description here Your exceptional post has been selected for our editorial column Staff Picks http://wolfr.am/StaffPicks and Your Profile is now distinguished by a Featured Contributor Badge and is displayed on the Featured Contributor Board. Thank you!

POSTED BY: EDITORIAL BOARD
Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
Attachments
Remove
or Discard

Group Abstract Group Abstract