Supongamos que tienes un cuadrilátero en 3D, definido por cuatro vértices $$\begin{array}{l} \vec{v}_1 = ( x_1 , y_1 , z_1 ) \\ \vec{v}_2 = ( x_2 , y_2 , z_2 ) \\ \vec{v}_3 = ( x_3 , y_3 , z_3 ) \\ \vec{v}_4 = ( x_4 , y_4 , z_4 ) \end{array}$$
Si uno de los vértices no está en el mismo plano que los otros tres, el cuadrilátero es no plano, o cuadrilátero inclinado. Normalmente hay más de una forma de interpretar la superficie -o mejor dicho, qué vértice es el que no está en el mismo plano que los otros tres, ya que tres cualesquiera (que no sean colineales) pueden definir un plano-, por lo que necesitamos más información que las coordenadas de los vértices para tomar la decisión en estos casos.
Por ello, supondré que el cuadrilátero es plano, y que el vector normal unitario de la superficie del cuadrilátero es $\hat{n}$ .
Si calculamos cuatro productos vectoriales cruzados entre cada par de vectores de borde consecutivos, $$\begin{array}{l} \vec{c}_1 = \left ( \vec{v}_4 - \vec{v}_1 \right ) \times \left ( \vec{v}_2 - \vec{v}_1 \right ) \\ \vec{c}_2 = \left ( \vec{v}_1 - \vec{v}_2 \right ) \times \left ( \vec{v}_3 - \vec{v}_2 \right ) \\ \vec{c}_3 = \left ( \vec{v}_2 - \vec{v}_3 \right ) \times \left ( \vec{v}_4 - \vec{v}_3 \right ) \\ \vec{c}_4 = \left ( \vec{v}_3 - \vec{v}_4 \right ) \times \left ( \vec{v}_1 - \vec{v}_4 \right ) \end{array}$$ y el cuadrilátero es convexo, entonces todos los vectores del producto cruzado están en el mismo semiespacio que el vector normal de la superficie: $$\begin{cases} \vec{v}_1 \cdot \hat{n} \ge 0 \\ \vec{v}_2 \cdot \hat{n} \ge 0 \\ \vec{v}_3 \cdot \hat{n} \ge 0 \\ \vec{v}_4 \cdot \hat{n} \ge 0 \end{cases}$$
El caso de igualdad en lo anterior ocurre sólo cuando los vectores de aristas consecutivos son paralelos, por ejemplo si $\vec{v}_3 = \lambda \vec{v}_2$ , $\lambda \in \mathbb{R}$ .
De hecho, todos los productos cruzados deben ser paralelos a la normal unitaria de la superficie, e incluso se puede utilizar lo anterior para calcular la normal de la superficie: $$\hat{n} = \frac{\vec{v}_1}{\lVert\vec{v}_1\rVert} = \frac{\vec{v}_2}{\lVert\vec{v}_2\rVert} = \frac{\vec{v}_3}{\lVert\vec{v}_3\rVert} = \frac{\vec{v}_4}{\lVert\vec{v}_4\rVert}$$ En la práctica, es posible que desee utilizar el más largo para la estabilidad numérica.
Si encuentras que, por ejemplo, $$\vec{v}_2 \cdot \hat{n} \lt 0$$ significa el ángulo interior en el vértice $\vec{v}_2$ es superior a 180°.