vector1.cross(vector2) does indeed give a vector that's perpendicular to them. As you say, most scripts actually replicate what you could do manually given enough time and effort - it's just that they can do it quickly and cleanly 'behind the scenes'...