The BioPython documentation shows the following:
11.6.3 Measuring torsion angles Use the vector representation of the atomic coordinates, and the calc dihedral function from the Vector module:
>>> vector1 = atom1.get_vector() >>> vector2 = atom2.get_vector() >>> vector3 = atom3.get_vector() >>> vector4 = atom4.get_vector() >>> angle = calc_dihedral(vector1, vector2, vector3, vector4)
We know that a torsion angle between N-C-alpha and C-alpha-C planes.
So, the minimum number of points required to form a plane is 3.
Then, Why does BioPython require 4 vectors?

