En feuilletant un angle à l'horizontale
Je veux savoir un moyen de symétrie d'un angle dans un axe horizontal, sans avoir à faire de nombreuses opérations. Dire que j'ai un angle de 0 ("vers la droite" dans mon code du système de coordonnées), le retourné de l'angle doit être de 180 (vers la gauche). Si 90 (vers le haut), retourné, il devrait encore être en 90. 89 à 91, et ainsi de suite.
Je peut fonctionner sur les axes X/Y vitesses implicite par l'angle mais qui permettrait de ralentir les choses, et je pense que c'est pas la bonne façon d'aller.
Je ne connais pas trop les maths donc j'ai peut-être appeler les choses par le mauvais nom...quelqu'un Peut aider?
EDIT: Désolé, j'ai pris longtemps, je devais être à l'extérieur de l'ordinateur pour longtemps, OK...
http://img215.imageshack.us/img215/8095/screenshot031v.jpg
Cette capture d'écran peut faire.La structure ci-dessus sont de deux satellites et d'un faisceau lié à la point blanc au centre. Les deux satellites doit hériter de l'angle du point blanc (visible à des fins de débogage), donc si c'est dans le but d'angle, ils vont le suivre. Le satellite de la gauche est en miroir, donc j'ai calculé avec 180-angle comme suggéré, mais c'était mon premier essai. Comme vous pouvez le voir il n'est pas en miroir, mais inversée. Et quand le point blanc tourne, il tourne à l'envers. L'autre n'a pas de problème.
C'est l'angle de recalcul pour quelque chose lié à quelque chose d'autre, pid serait le parent, et l'id de l'actuel. la broche.ang est l'angle de décalage copié lorsque l'objet est lié à un autre, de sorte qu'il tient la position lors de la rotation:
if(object[id].mirror)
object[id].angle = 180 - (object[id].pin.ang + object[pid].angle);
else
object[id].angle = object[id].pin.ang + object[pid].angle;
Et il s'agit de la rotation de la partie. OpenGL. le offx/y est pour des choses rotation hors-centre, comme le faisceau sur le point de venir là-bas, il rend tout le reste à droite.
glTranslatef(list[index[i]].x, list[index[i]].y, 0);
glRotatef(list[index[i]].angle, 0.0, 0.0, 1.0);
glTranslatef(list[index[i]].offx, -list[index[i]].offy, 0);
La rotation semble aussi manquer lorsque la vitesse de rotation (un entier ajoutés chaque rafraîchissement à l'angle actuel, positif pour la rotation des aiguilles d'une montre, comme dans cette prochaine:
http://img216.imageshack.us/img216/7/screenshot032ulr.jpg
Donc ce n'est certainement pas 180-angle, en dépit de façon évidente qu'il serait. La mise en miroir est fait en inversant simplement les coordonnées de la texture de sorte qu'il n'affecte pas l'angle. J'ai peur qu'il pourrait être un caprice sur le GL de rotation chose.
Voulez-vous traiter pointant vers le bas comme 270 ou -90? Ou est-ce jamais arrivé?
Eh bien, je ne suis pas trop sûr de ce que je fais, je suis désolé pour la mauvaise explication. Mon objectif est d'avoir des canons sur un personnage, et ces canons suivant l'état du personnage de sorte qu'ils visent à l'opposé de la direction en fonction de leur angle. Fondamentalement, la permutation de droite et de gauche, pour les canons peuvent suivre le miroir drapeau. Si je ne 180 angle lors de la rotation, ils seront retournés, donc un canon pointant vers le bas-droit de viser vers le haut-gauche. J'essaie de pointer vers le bas-gauche.
Si vous n'180+angle, il vous donnera l'exact opposé de la direction (par exemple: haut-gauche deviendra en bas à droite). Si vous n'180-angle, il va basculer de gauche à droite (ou de droite à gauche), sans affecter le haut/vers le bas (par exemple: haut-gauche deviendra en haut à droite).
Alors qu'est-ce exactement ce que vous voulez, voulez-vous de réfléchir à travers l'axe des Y? Parce que soustrayant l'angle de 180 fonctionne parfaitement, pourriez-vous être plus clair sur les angles, dans votre exemple, où il ne fonctionne pas. Pour tout ce que vous avez dit dans le premier post, en soustrayant de 180 œuvres. Ce que vous pourriez faire si seulement l'exploitation sur le x/y de coordonnées est de multiplier la coordonnée y par -1. Ce sera toujours le reflet de votre coordonner l'échelle de l'axe des y.
OriginalL'auteur | 2009-09-03
Vous devez vous connecter pour publier un commentaire.
L'expression de la quantité (simplement en regardant les maths) serait
(180 - angle)
Note les négatifs si vous tombez sous le "plan horizontal", qui pourrait laisser comme ils sont, ou manipuler comme un cas spécial.
Vous pouvez normaliser les angles de tomber dans, par exemple [0;360) intervalle en ajoutant ou en soustrayant un multiple de 360 degrés.
Dans ce cas, il n'y a aucun moyen de retourner l'objet en changeant juste l'angle. Vous avez besoin d'un miroir, c'est à dire flip chaque point séparément dans le ojbect.
Je pense que vous êtes confus quelque chose. Comment fonctionne le modèle que vous souhaitez inverser? Comment faut-il la chercher après le flip?
Êtes-vous en mesure de poster une capture d'écran? Il dépend de la façon dont votre image est construite. Mais oui, comme @Guffa dit, vous avez probablement besoin de retourner l'image.
OriginalL'auteur butterchicken
N'est-il pas tout simplement
résultat = 180-(d'angle)
OriginalL'auteur Martin
Comme déjà expliqué, vous trouvez l'angle opposé. en soustrayant votre angle de 180 degrés. Par exemple:
De manipuler directement les X/Y vitesses ne serait pas très encombrant. Il vous suffit d'inverser le sens de la vitesse X, en le multipliant par moins 1, exemple:
speedx = (-1) * speedx
. Ce serait changer la gauche-à droite en direction, par exemple: quelque chose d'émouvant à la gauche serait de commencer à se déplacer vers la droite, et vice versa, et la vitesse verticale serait pas affectée.Si vous êtes à l'aide de sinus/cosinus (sin/cos) pour recalculer votre X/Y de la vitesse composants, puis le
*(-1)
méthode serait sans doute plus efficace. En fin de compte, il dépend du contexte de votre programme. Si vous êtes à la recherche d'une meilleure solution, mise à jour de votre question avec plus de détails.OriginalL'auteur Samuel Jaeschke
Aah, semble que le problème venait de nombres négatifs après tout, j'ai veillé à eux d'être positif et maintenant la rotation ne fine, je n'ai même pas besoin de recalculer l'angle...
Merci à tout le monde, j'ai fini par comprendre en raison de bits de chaque réponse.
OriginalL'auteur
de retourner dans le sens antihoraire pour des aiguilles d'une montre (de 270 à droite -> 90 à droite)
angle - 360
--
de flip vertical (180 sur le dessus -> 0/360 sur le dessus)
Math.Normalize(angle - 180)
--
à la fois:
float flipped_vertical = angle - 360
float flipped_vertical_and_horizontal = Math.Normalize(flipped_vertical- 180)
OriginalL'auteur Wikkle_A
Cette solution, c'est -Y angles orientés (comme une montre)! Pour +X orientation (comme à l'école de mathématiques de), vous devez échanger X et Y.
OriginalL'auteur vikingfabian
juste
360-angle
vont retourner votre angle horizontaly mais pas verticalyIl serait miroir par rapport à l'axe des abscisses (axe horizontal). Je suppose que l'auteur de cette réponse embrouillés à cause de la formulation.
OriginalL'auteur user5450074