2010-08-31 3 views
0

Espérons que je peux décrire ma situation clairement chaque fois que je tente de le décrire aux autres sur le tableau blanc ou un stylo et du papier, il faut quelques tentatives :)Contraindre une roue arrière à la roue avant

Une partie de mon programme comprend un chariot qui roule le long d'un rail et le chariot roule sur deux roues. Les rails sont une ligne simple qui monte et descend dans les courbes et s'aplatit également. Pour créer le niveau j'utilise un NSMutableArray de CGPoints et les dessine à l'écran.

Ma détection de collision actuelle consiste à utiliser chaque roue x-cordée et à la comparer à l'ensemble des valeurs x des points. Quand c'est entre deux valeurs x de points, je peux utiliser le dégradé pour découvrir s'il est inférieur ou inférieur à la valeur y à ce moment-là. Cela fonctionne bien lorsque j'utilise des valeurs définies de X.

Alors, voici le problème. Premièrement, j'ai une roue avant qui roule parfaitement le long de cette ligne avec une position x correcte et y correcte. Le problème que j'ai est de créer une roue arrière qui suit cette roue avant. La roue arrière suit également parfaitement la ligne mais c'est toujours une distance X derrière la roue avant, cela s'avère irréaliste car lorsque vous montez ou descendez des pentes raides, la distance entre les roues est trop grande en raison de la différence de Y.

Exemple:

O O .......

Exemple Hill:

O

........ O

Même distance en x, différence en Y, donc la distance hypoténuse est plus grande et donne l'impression que les roues s'écartent. J'ai besoin de contraindre la roue arrière à la roue avant donc c'est vrai (hypoténuse) la distance est toujours la même. La difficulté que j'ai est que, puisque cela implique de changer sa position x, je ne peux pas avoir une idée de la détection de collision. Si je commence à monter, je dois changer sa vitesse pour tomber derrière la roue avant, alors j'ai besoin de changer sa valeur x pour rester la même distance derrière le volant, maintenant c'est la valeur y. aura tort car il finit dans le sol.

J'ai râpé mon cerveau et les bureaux pour quelques jours maintenant, de l'aide s'il vous plaît?

+0

Ceci peut être une bonne question pour l'échange de maths si vous n'en avez pas ici. http://math.stackexchange.com/ On dirait que ce serait un concept mathématique simple qui ferait cela. IE: cos (hypoténuse)? Quelque chose comme ça, au lieu de changer Y, vous changeriez le rapport de x: y – bradenkeith

+0

le problème avec ceci est que cela ne fonctionne que si le gradient sous les deux roues est le même. Si c'est sur une pente rapide, la roue arrière sera soit au-dessus ou au-dessous de la colline – user355622

Répondre

0

La manière la plus facile de garder les roues à la même distance est probablement de contraindre les deux roues à la voie. Vous pouvez définir un troisième nombre pour la piste NSMutableArray, distance de l'origine de la piste. Vous devez définir votre propre classe au lieu d'utiliser la classe CGPoints.

Une autre possibilité est que le centre des roues suive la piste, mais avec un décalage égal au rayon des roues. Le centre de chaque roue est calculé en utilisant les coordonnées de la voie x et y, l'angle de la ligne d'où la roue touche la piste au centre de la roue, et le rayon de la roue,

Questions connexes