I’m currently working on cleaning up and streamlining our Core types, such as the Cartesian and Matrix, but had a quick question. Should all similar types have the same functionality?
For example, I found the following functions below which do not exist on Cartesian2 but exist on Cartesian3.
I’m pretty sure every one of these makes sense to have on Cartesian2, as well; so should I port these functions to Cartesian2? I think it’s the best choice from an API standpoint, but I wanted to see what others thought.
This is OK with me. We haven’t had a need for them yet, of course, but it is good for consistency.
I’m not sure that we should include the cross product though. I’m not sure that a 2D cross product exists, unless we consider them as 3D vectors with z = 0. Then the cross product will always be +z or -z, ignoring magnitude. Perhaps the cleaner thing for client code is to be explicit and use cross for Cartesian3 in that case.
You’re right about cross, I wasn’t thinking. I think the general guideline should be that if it makes sense to be on all of the types, it should be; but if something doesn’t exist for a given type (like cross on Cartesian2) then we just leave it off.