Course syllabus


Course PM

This page contains the program of the course: lectures, exercise sessions and computer labs. Other information, such as learning outcomes, teachers, literature and examination, are in a separate course PM.

Programming prerequisites

This course assumes some previous programming experience. If you are new to programming, I recommend that you read this online book. Most of the programming in the course is done in the Python language. If you are new to Python, but familiar with MATLAB, please have a look at this NumPy for MATLAB users tutorial. For Python, I also recommend the onramp course: (I urge you to take this tutorial to test your skills).

Throughout the course we shall use Python via the Jupyter web-based interface. It is recommended that you use Jupyter in either of these two ways:

  • If you have a Google account, you can use the online Colab environment. This allows you to create, import, and share Jupyter Notebooks and to run the code online. You must be connected at all times to use Colab Notebooks.
  • If you prefer to work on your local computer (so that you don't have to be online all the time or if you don't have a Google account), you can install the Anaconda Python distribution on your computer (available on Windows, Mac, and Linux).

Mathematical prerequisites

This course assumes familiarity with mathematical concept of basic linear algebra in 3 dimensions (dot products, cross products, matrices, determinants). If you are not familiar with linear algebra, it is strongly recommended that you first study this material, for example by taking an on-line course, such as this one:

Link between geometry and architecture

"Geometry links the art of building and the physics of space-time. Mathematical breakthroughs in geometry have led to new ways of designing our structures and our ability to visualise and describe the world, phenomena in nature and the universe. However, in contemporary architecture and structural engineering, a more profound understanding of geometry has been forgotten."
Emil Adiels, 2021

As an inspiration for the material we study in this course, I recommend you to read the introductory chapter in the licentiate thesis of Emil Adiels. Also, some time ago Emil gave an online seminar where he discussed how geometry is used in architectural workshops at Chalmers. I also recommend you to look at this video (50 min long).


Each week has 2-3 sessions, where each session is typically a combination of lectures and computer exercises. The detailed schedule of the course is in TimeEdit.


Week Contents Sections
1 Intro to Python/NumPy/Matplotlib/Jupyter, repetition of linear algebra in 3D.

Python Numpy Tutorial
Appendix A
(Pottmann et al)
Short lecture notes on 3D vectors

2 Geometric primitives and coordinate systems (slides) Chapter 1.1: the Cartesian coordinate system, cuboids, cylinders
Chapters 1.2 and 3.7: cylindrical and spherical coordinates, cones, spheres, ellipsoids
Chapters 3.2-3.3: pyramids, prisms, Platonic solids
3 More on coordinate systems, transformations and projections (slides) Chapter 6.6: homogeneous coordinates
Chapters 5-6: rigid body motion (planar and 3D), linear and affine transformations, projective transformations
Chapter 2: orthographic projection, perspective projection
4 Deformations (slides) Chapters 4.1-4.3: set operations
Chapters 10.1, 10.3-10.4: offsets, morphological operations Chapters 13.1-13.4: slice deformations, tapering, twisting
5 Modelling of curves and surfaces

Presentation of course projects
Chapters ???: barycentric coordinates
Chapters 7.2-7.3: parametric curves, conic sections
Chapters 8.2-8.4: Bézier curves, splines, NURBS
Chapters 11.2-11.3: Bézier surfaces, B-spline surfaces, (and possibly NURBS surfaces)
6 Digital reconstruction and fitting of physical models Chapter 17: point clouds, volumetric models, surface fitting, noise handling
Chapter 18.1: parameter optimisation
7 Work with course projects
8 Work with course projects
Exam week Hand in course projects


Back to the top

Exercises and worksheets

Week Exercises
1 Diagnostic test
2 Worksheet 1
3 Worksheet 2
4 Worksheet 3
5 Worksheet 4
6 Course project
7 Course project
8 Presentations


Back to the top

Computer labs

In this course we use two programming environment: Rhino+Grasshopper (weeks 7-8) and Python/Numpy (weeks 2-6). You're assumed to possess a basic understanding of both of these tools.

Back to the top

Course summary:

Date Details Due