`position`, `forward`, and `backward` are all `Cartesian3`s so the scratch variables should be `Cartesian3`s because when you add them above a `z` property will be added to the `Cartesian2`s. Calling `projectPointOntoPlane` with a `Cartesian3` result parameter is OK because it will only assign values to the `x` and `y` properties. Here you should use the static `Cartesian2.subtract` instead of the prototype function because the `z` property is meaningless at this point.