Como determino com eficiência se um polígono é convexo, não convexo ou complexo?

Na página de manual paraXFillPolygon:

E seshape éComplexo, o caminho pode se auto-interceptar. Observe que pontos coincidentes contíguos no caminho não são tratados como auto-interseção.

E seshape éConvexo, para cada par de pontos dentro do polígono, o segmento de linha que os conecta não cruza o caminho. Se conhecido pelo cliente, especificandoConvexo pode melhorar o desempenho. Se você especificarConvexo para um caminho que não é convexo, os resultados gráficos são indefinidos.

E seshape éNonconvex, o caminho não se intercepta, mas a forma não é totalmente convexa. Se conhecido pelo cliente, especificandoNonconvex ao invés deComplexo pode melhorar o desempenho. Se você especificarNonconvex para um caminho de interseção automática, os resultados gráficos são indefinidos.

Estou tendo problemas de desempenho com preenchimentoXFillPolygon e, como a página de manual sugere, o primeiro passo que desejo executar é especificar a forma correta do polígono. Atualmente estou usandoComplexo estar no lado seguro.

Existe um algoritmo eficiente para determinar se um polígono (definido por uma série de coordenadas) é convexo, não convexo ou complexo?

questionAnswers(10)

yourAnswerToTheQuestion