Pregunta

Estoy escribiendo un programa (.net) para crear un estadio de estilo de diseño y la necesidad de determinar el ángulo de rotación para cada polígono en comparación con la horizontal.

Esto es así ya que puede construir el contenido del polígono y también girar este correctamente para que quepa dentro.

Dada la imagen de abajo como ejemplo para simular cada variante de la dirección de orientación (indicado por la línea roja) ¿cómo podría determinar el ángulo de rotación necesario para obtener la forma que tiene la línea roja en la parte superior, como ya está demostrado por la forma 5.

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

He encontrado la lógica para determinar el ángulo de los puntos que conforman la línea roja, pero también necesito saber la rotación para conseguir la vuelta a la horizontal.

No estoy seguro si necesito algún punto central de referencia para todos los polígonos para ayudar.

¿Cómo podría yo mejor manera de resolver esto?

¿Fue útil?

Solución

Si conoce el ángulo de la línea roja por algún polígono ( a , por ejemplo), entonces el polígono está en un lado u otro de la línea. Por lo tanto:

  • Utilice el color medio de algunos píxeles cerca de la línea en ambos lados para determinar cual es el caso.
    • Si el polígono está por encima de la línea, el ángulo de rotación es 180 + a .
    • Si el polígono está por debajo de la línea, la rotación es a .

donde arriba y a continuación corresponden a los lados laterales de ángulo más pequeño y de mayor ángulo de la línea de acuerdo con la forma de medir a .

Otros consejos

(. Por ejemplo, 0 grados para polígono 5, 45 grados para 4, 90 grados para 3, etc.)

Me gustaría tratar de calcular los vectores normales de cada línea roja y entonces el ángulo que necesita para girar eso normal - y por lo tanto el polígono coincidente -. por lo que el normal "apunte hacia arriba" debe ser muy simple

Por desgracia no tengo las fórmulas necesarias disponible para que la parte superior de la cabeza, pero buscando en Google "vector normal" y / o la búsqueda de ella en la Wikipedia debería empezar bien, creo. Posiblemente en la dirección de la llamada 'producto cruzado'.

No punto central de referencia para todos los polígonos debe ser necesaria para esto (dirección normal no está relacionada con coordenadas absolutas).

sin, cos, tan funciones le permiten convertir la relación de ventaja de triángulo para grados.

Imagínese, un extremo de la línea roja está en (x1, y1) y el otro extremo está en (x2, y2). Puede tratar la línea roja como hipotenuse de triángulo rectángulo y utilizar arctan para obtener grados.

Relación entre catetos es (x2-x1) / (y2 - y1). La rotación de la línea roja entonces es arctan ((x2-x1) / (y2 - y1)). Mirar hacia fuera para situaciones en las que Y1-y1 es 0!

Vamos a probar un ejemplo de la imagen, polígono 6 con coordenadas (55, 65) y (65, 55). Tipo de Google: "arctan ((65-55) / (55-65)) en grados"

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top