Pergunta

Eu estou escrevendo um programa (.net) para criar um layout de estilo estádio e necessidade de determinar o ângulo de rotação para cada polígono em comparação com a horizontal.

i Isto é assim pode construir o conteúdo do polígono e também rodar esta correctamente para encaixe dentro.

Dada a seguir imagem como um exemplo para simular cada variante da direcção forro (indicado pela linha a vermelho) como i poderia determinar o ângulo de rotação necessário para obter a forma ter a linha vermelha no topo, como já é mostrado pela moldar 5.

http://i40.tinypic.com/16ifhoo.gif text alt

Eu encontrei lógica para determinar o ângulo dos pontos que compõem a linha vermelha, mas eu também preciso saber a rotação para obtê-lo de volta à horizontal.

Eu não tenho certeza se eu precisar de algum ponto de referência para todos os polígonos para ajudar.

Como eu poderia melhor resolver isso?

Foi útil?

Solução

Se você sabe o ângulo da linha vermelha por algum polígono ( a , por exemplo), então o polígono está de um lado ou outro dessa linha. Assim:

  • Use a cor média de alguns pixels perto da linha em ambos os lados para determinar o que é o caso.
    • Se o polígono está acima da linha, o ângulo de rotação é 180+ a .
    • Se o polígono está abaixo da linha, a rotação é a .

em que acima e abaixo correspondem às laterais menor ângulo e maior ângulo lados da linha de acordo com a forma como se mede a .

Outras dicas

Gostaria de tentar calcular os vetores normais em cada linha vermelha e, em seguida, o ângulo que você precisa para rodar que normal (por exemplo, 0 graus para polígono 5, 45 graus para 4, 90 graus para 3, etc.) - e, assim, o polígono correspondente -. para que os "pontos para cima" normais deve ser muito simples

Infelizmente eu não tenho as fórmulas necessárias disponíveis para você em cima da minha cabeça, mas pesquisando "vector normal" e / ou procurando por ele na Wikipedia deve começar muito bem, eu acho. Possivelmente na direção do chamado 'produto cruz'.

No ponto de referência para todos os polígonos devem ser necessário para este (direção normal não está relacionado com coordenadas absolutas).

sin, cos, tan funções permitem que você converter de relação de borda triângulo para graus.

Imagine uma extremidade da linha vermelha está em (x1, y1) e outra extremidade está em (x2, y2). Você pode tratar linha vermelha como hipotenuse de triângulo retângulo e usar arctan para obter graus.

Relação entre catetos é (x2-x1) / (y2 - y1). Rotação de linha vermelha em seguida, é arctan ((X2-X1) / (Y2 - Y1)). Cuidado com as situações em que y1-y1 é 0!

Vamos tentar um exemplo de sua imagem, polígono 6 com coords (55, 65) e (65, 55). Digite no google: "arctan ((65-55) / (55-65)) em graus"

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top