Computational design in architecture: Defining parametric, generative, and algorithmic design