Digamos que temos uma forma irregular:
E duas criaturas se movendo ao longo de seu contorno.
Depois, suavizamos completamente a forma puxando os cantos para fora.
Temos isso:
É fácil ver agora que a Orange está se movendo no sentido horário e no sentido anti-horário verde. Como posso saber em que direção eles estão se movendo sem suavizar a forma?
Nova imagem
Respostas:
Desenhe uma linha até o infinito e conte quantas vezes você cruza a forma (par ou ímpar), sem contar o segmento em que a criatura está. Depois verifique se a criatura está indo para a esquerda ou direita dessa linha.
Neste exemplo, cruzamos a forma duas vezes (até mesmo) e vamos para a esquerda. O resultado é imediato nesta tabela:
No pseudocódigo:
fonte
Depende das informações disponíveis na estrutura de dados da forma, mas uma criatura que se move no sentido horário ao longo do contorno de uma forma sempre terá o interior da forma à direita e uma criatura que se move no sentido anti-horário terá o interior da forma. à esquerda.
fonte
fonte
Você precisa saber para que lado o polígono está definido, qual o sentido dos vértices.
Se você não sabe disso, pode resolvê-lo calculando a área do polígono:
O sinal do resultado (positivo ou negativo) indica se é no sentido horário ou anti-horário. Você precisa tentar isso para ver qual o caminho que é melhor para você, porque depende do seu sistema de coordenadas.
Se a forma for no sentido horário:
Se a forma estiver no sentido anti-horário:
fonte
Parece que Trevor já abordou esta questão, mas aqui está a minha solução:
calcular a área que sua forma cobre, significando
usando a área calculada como acima, você pode facilmente saber se a forma em si é no sentido horário ou não. é no sentido horário apenas se a área estiver abaixo de zero.
verifique se os objetos estão se movendo da mesma maneira que os vértices estão em ordem ou na direção oposta.
fonte