Question

Je suis en train d'écrire un programme (.net) pour créer une mise en page de style du stade et doivent déterminer l'angle de rotation pour chaque polygone par rapport à l'horizontale.

Il en est ainsi je peux construire le contenu du polygone et faites pivoter également cela correctement pour tenir à l'intérieur.

Compte tenu de l'image ci-dessous à titre d'exemple pour simuler chaque variante de la direction orientée (indiquée par la ligne rouge) comment je peux déterminer l'angle de rotation nécessaire pour obtenir la forme pour avoir la ligne rouge sur le dessus comme cela est déjà indiqué par forme 5.

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

J'ai trouvé logique pour déterminer l'angle des points qui composent la ligne rouge, mais je dois aussi savoir la rotation pour le récupérer à l'horizontale.

Je ne sais pas si je besoin d'un certain point de référence central pour tous les polygones pour aider.

Comment ce que je pourrais mieux résoudre?

Était-ce utile?

La solution

Si vous connaissez l'angle de la ligne rouge pour certains polygones ( a , par exemple), le polygone est d'un côté ou l'autre de cette ligne. Donc:

  • Utiliser la couleur moyenne de quelques pixels près de la ligne sur les deux côtés afin de déterminer qui est le cas.
    • Si le polygone est au-dessus de la ligne, l'angle de rotation est 180+ a .
    • Si le polygone est en dessous de la ligne, la rotation est a .

où ci-dessus et ci-dessous correspondent aux parois latérales de plus petit angle et de plus grand angle de la ligne en fonction de la manière dont on mesure a .

Autres conseils

(. Par exemple 0 degrés pour le polygone 5, 45 degrés pour 4, 90 degrés pour 3, etc.)

Je voudrais essayer de calculer les vecteurs normaux sur chaque ligne rouge, puis l'angle vous avez besoin de faire tourner ce normal - et donc le polygone correspondant -. de sorte que la « pointe vers le haut » normal devrait être très simple

Malheureusement, je n'ai pas les formules nécessaires disponibles pour vous du haut de ma tête, mais googler « vecteur normal » et / ou la recherche de sur Wikipédia devrait vous aider à démarrer très bien, je pense. Peut-être dans le sens de la soi-disant « produit vectoriel ».

Aucun point de référence central pour tous les polygones ne devrait être nécessaire pour cette (direction normale est pas liée à des coordonnées absolues).

sin, cos, tan fonctions permettent de convertir du rapport de bord de triangle en degrés.

Imagine, une extrémité de la ligne rouge est à (x1, y1) et à l'autre extrémité est (x2, y2). Vous pouvez traiter la ligne rouge comme hipotenuse de triangle rectangle et utiliser arctan pour obtenir des diplômes.

Ratio entre catheti est (x2-x1) / (y2 - y1). La rotation de la ligne rouge est alors arctan ((x2-x1) / (y2 - y1)). Méfiez-vous des situations où y1-y1 est 0!

Essayons un exemple de votre image, polygone 6 avec coords (55, 65) et (65, 55). Type dans google: "arctan ((65-55) / (55-65)) en degrés"

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top