pub fn to_affine(&self) -> Self {
        let [x, y, z] = self.coordinates();
        // If it's the point at infinite
        if z == &FieldElement::zero() {
            // We make sure all the points at infinite have the same values
            return Self::new([
                FieldElement::zero(),
                FieldElement::one(),
                FieldElement::zero(),
            ]);
        };
        let inv_z = z.inv().unwrap();
        ProjectivePoint::new([x * &inv_z, y * inv_z, FieldElement::one()])
    }
Creates the same point in affine coordinates. That is,
returns [x / z: y / z: 1] where `self` is [x: y: z].
Panics if `self` is the point at infinity.
crates/math/src/elliptic_curve/point.rs