On this page:
3.12.1 Exercises 20
3.12.1.1 Question 57

3.12 Modeling Doric Columns

The three-dimensional modeling has the virtue of allowing us to create geometric entities that are more realistic than bi-dimensional representations of those entities. As an example, reconsider the Doric column previously introduced in the section Doric Order. In that section, we developed a series of functions capable of creating a front view of the column’s components. Even though bi-dimensional views are useful, it is even more useful to model a column as a three-dimensional entity.

In this section, we are going to employ some of the most relevant operations for three-dimensional modeling of columns, in particular, truncated cones for shaping the shaft and the echinus, and a rectangular box to shape the abacus.

Before, the columns’ bi-dimensional view was laid out in the \(XY\) plane. Now, only the column’s base will be set on the \(XY\) plane: the column’s body will be oriented along the \(Z\) axis. Although it would be trivial to employ a different arrangement of axes, this is the one closest to reality.

Similarly to many other functions in Khepri, each of the operations to model solids has different ways of being invoked. For the case of the function to model truncated cones - cone_frustum - the method that is more convenient to us is the one receiving the base center coordinates, the base radius, the height and, finally, the top radius.

With this in mind, we can redefine the operation for creating the column’s shaft:

shaft(p, h_shaft, r_base, r_top) = cone_frustum(p, r_base, h_shaft, r_top)

Likewise, the operation for creating the echinus will be:

echinus(p, h_echinus, r_base, r_top) = cone_frustum(p, r_base, h_echinus, r_top)

Finally, to build the abacus - the rectangular box (with a square base) at the column’s top - we have two different options. The first is to specify the two corners of this box. The second is to specify one of these corners followed by the box’s dimensions. For this example, we will employ the second alternative:

abacus(p, h_abacus, l_abacus) =

  box(p+vxyz(-(l_abacus/2), -(l_abacus/2), 0), l_abacus, l_abacus, h_abacus)

3.12.1 Exercises 20
3.12.1.1 Question 57

Implement the abacus function but using the other option for creating a rectangular box, i.e., providing two opposite corners.

Finally, all that is left is to implement the column function that, similarly to what happened in the bi-dimensional case, successively invokes the functions shaft, echinus and abacus, but now progressively increasing the \(z\) coordinate:

column(p, h_shaft, r_base_shaft, h_echinus, r_base_echinus, h_abacus, l_abacus) =

  begin

    shaft(p, h_shaft, r_base_shaft, r_base_echinus)

    echinus(p+vz(h_shaft), h_echinus, r_base_echinus, l_abacus/2)

    abacus(p+vz(h_shaft+h_echinus), h_abacus, l_abacus)

  end

With these redefinitions, we can now reproduce the columns introduced in section Doric Order, (shown in this figure), but now generating a three-dimensional image as presented in this figure:

column(xyz(0, 0, 0), 9, 0.5, 0.4, 0.3, 0.3, 1.0)

column(xyz(3, 0, 0), 7, 0.5, 0.4, 0.6, 0.6, 1.6)

column(xyz(6, 0, 0), 9, 0.7, 0.5, 0.3, 0.2, 1.2)

column(xyz(9, 0, 0), 8, 0.4, 0.3, 0.2, 0.3, 1.0)

column(xyz(12, 0, 0), 5, 0.5, 0.4, 0.3, 0.1, 1.0)

column(xyz(15, 0, 0), 6, 0.8, 0.3, 0.2, 0.4, 1.4)

Multiple three-dimensional Doric columns.

image