// This makes a birdhouse from a Little Golden Book like The Poky Little Puppy. // The only major variable is the angle of the roof theta. maxw = 15.5 cm maxh = 20.15 cm theta = 30 deg wf = maxw we = wf/2 hr = we tan[theta] h0 = maxh - hr hpeak = maxh l = hr / sin[theta] println["l is " + format[l, "cm", 2]] g = new graphics g.stroke[.5 mm] // Draw front/back of house p = new polygon p.addPoint[-wf/2, 0 cm] p.addPoint[wf/2, 0 cm] p.addPoint[wf/2, -h0] p.addPoint[0 cm, -hpeak] p.addPoint[-wf/2, -h0] println["Side height is " + format[h0, "cm", 2]] g.add[p] g.drawEllipseCenter[0 cm, -6.8 cm, 1.5 in, 1.5 in] // Draw book cover lroof = maxw wr = lroof cos[theta] hr = hpeak - lroof sin[theta] // Draw wood roof lwoodroof = maxw - 1 cm wr1 = lwoodroof cos[theta] hr1 = hpeak - lwoodroof sin[theta] g.color[0,0,0,.5] thickness = 6 mm g.stroke[thickness] voffset = thickness cos[theta] //g.line[0 cm, -hpeak - 1/2 voffset, wr1, -hr1 - 1/2 voffset ] //g.line[0 cm, -hpeak - 1/2 voffset, -wr1, -hr1 - 1/2 voffset] g.stroke[1 mm] g.color[0,0,0] //g.line[0 cm, -hpeak - voffset, wr, -hr - voffset] //g.line[0 cm, -hpeak - voffset , -wr, -hr - voffset] g.show[] // Draw side depth = maxw g2 = new graphics g2.stroke[.5 mm] g2.drawRectSides[-depth/2 + thickness, -h0, depth/2 - thickness, 0 cm] g2.font["SansSerif", 1 cm] g2.text["side", 0 cm, -h0/2] g2.show[] // Draw roof dwoodroof = maxh - 2 cm g3 = new graphics g3.stroke[.5 mm] g3.drawRectSides[-dwoodroof / 2, lwoodroof, dwoodroof / 2, 0 cm] g3.font["SansSerif", 1 cm] g3.text["roof", 0 cm, lwoodroof / 2] g3.show[] // Draw floor g4 = new graphics g4.stroke[.5 mm] wfloor = maxw + 4 cm g4.drawRectCenter[0 cm, 0 cm, wfloor, wfloor] g4.font["SansSerif", 1 cm] g4.text["floor", 0 cm, 0 cm] g4.show[] // Draw felt under floor wfelt = wfloor - 1 cm g6 = new graphics g6.drawRectCenter[0 cm, 0 cm, wfelt, wfelt] g6.stroke[.5 mm] g6.font["SansSerif", 1 cm] g6.text["felt", 0 cm, 0 cm] g6.show[] // Draw supports g5 = new graphics g5.stroke[.5 mm] ps = new polygon // Width of support ws = 13 mm wout = we - thickness dout = wout tan[theta] hout = hpeak - dout win = wout - ws din = win tan[theta] hin = hpeak - din ps.addPoint[0 cm, 0 cm] ps.addPoint[ws, 0 cm] ps.addPoint[ws, -hout] ps.addPoint[0 cm, -hin] g5.add[ps] g5.show[]