I have two triangle meshes and want to know whether they are orientable or not.
I think the right one is orientable and the left one is not orientable because it's a Möbius band
. But I am not sure.
How can I check/test/prove if one is orientable or not?
An orientation of a triangle is a particular choice of circular ordering of its vertices (e.g. $abc$ or $acb$, i.e. clockwise or counterclockwise). For two adjacent triangles to have consistent orientation, their common edge should have different orientation in the triangles. Say, we have triangles $abc$ and $bcd$. In $abc$ it goes from $b$ to $c$, while in $bcd$ it goes from $b$ too $c$ as well, making the whole orientation inconsistent. In $bdc$ or $cbd$ or $dcb$ (these three orderings define the same orientation) it goes from $c$ to $b$, making the orientation of $abc$ and $bdc$ consistent. (draw this all on paper if it doesn't make sense: a picture does a lot here)
So, the algorithm is: pick any triangle, assign any orientation to it, then go to neighbouring triangles (via BFS is DFS, it doesn't matter), and decide the orientation for those, which is forced to be one or another due to already oriented neighbors. If at some point you find inconsistency — that is, several neighbors force a single triangle to have different orientations, — the surface is non-orientable. Otherwise, when there are no more neighbors, you've found an orientable connected component of the mesh.