Je fais un jeu avec Python-> PyGame-> Albow et j'ai rencontré un problème avec la génération de cartes. Cependant, je vais essayer d'expliquer le problème de manière agnostique. Je crois que ce n'est pas lié à python. J'ai divisé la génération de la carte de jeu en plusieurs parties.Comment calculer les positions des trous dans un plateau de jeu?
La première partie génère les trous de carte.
Les trous sont contenus dans une liste/tableau. Chaque objet de trou a une cartographie des angles relatifs aux autres trous qui l'entourent, chacun de ces trous s'y rattache également. (Un peu comme les frères et sœurs HTML DOM, la différence étant un angle quelconque est possible)
Un trou est quelque chose comme:
hole = {
empty: True,
links: {
90: <other hole>,
270: <another hole>,
etc...
}
}
deuxième partie, calculer les positions des trous. Le code est quelque chose comme ça.
def calculate_position(hole):
for linked_hole in hole.links:
if linked_hole.position == None:
#calculate linked hole's position relative to this hole
linked_hole.position = [position relative to first hole]
calculate_position(linked_hole)
first_hole.position = (0, 0) #x, y
calculate_position(first_hole)
La troisième partie, au tirage bord.
Trouvez la hauteur de la fenêtre, développez les positions des trous (calculées à l'étape deux) pour s'adapter à la fenêtre. Dessine tout.
Je crois que le problème est à l'étape deux Je calcule chaque trou par rapport à un trou précédent. Les erreurs d'arrondi s'additionnent et la planche devient en forme de louchet au fur et à mesure que le trou de départ est plus éloigné des trous et plus la planche est grande. Cela se produit uniquement lors de la création de cartes qui ne sont pas rectangulaires, car il n'y a pas d'erreurs d'arrondi. J'utilise la trigonométrie simple pour calculer les positions relatives des trous en convertissant l'angle en radians et en utilisant des fonctions intégrées sin/cos.
Toute idée à une solution ou si je me trompe à ce problème est utile :)
PS: Je vais poster le code source si elle aidera à se sentir mais il va encombrer les choses
Merci pour toutes les réponses.
Les personnes qui ont dit arrondir probablement n'allait pas être un problème étaient sur place. J'ai eu un autre coup d'oeil à travers le code dans cet esprit. Je suis gêné de dire que je produisais les mauvais angles dans la première partie de la génération de la planche, la partie de rendu était correcte.
J'ai indiqué que la réponse de Norman était correcte car elle explique comment utiliser une combinaison linéaire de vecteurs pour résoudre le problème.
Pouvez-vous poster un screenie, afin que nous puissions voir ce que signifie "en forme de strabisme"? Peut-être que vous pouvez poster une source à http://pastebin.org/ si vous ne voulez pas encombrer votre question –