2010-08-22 5 views
0

J'essaie de faire une application iPhone qui peut tracer un chemin entre deux points (similaire à Google Maps) mais au lieu de la carte je veux utiliser n'importe quelle autre image comme arrière-plan, ce chemin entre les deux les points peuvent ne pas être droits et il peut y avoir plusieurs chemins pour aller d'un point à un autre alors je veux tracer le chemin le plus court entre les deux points.Dessiner des routes avec l'iPhone

J'ai essayé d'utiliser le CGContext & CGPath mais j'ai été empilé.

Pouvez-vous m'aider plz.

Thanx,

Ghaith

+1

Vous devez être plus précis dans votre question - qu'avez-vous déjà essayé? qu'est-ce que tu ne peux pas faire exactement? A quoi doivent ressembler vos chemins, quelles sont les contraintes pour les chemins obligatoires? etc ... – Vladimir

Répondre

1

Je pense que vous êtes à la recherche UIBezierPath. Vous pouvez ajouter des simples lignes/polygones avec quelque chose comme:

UIBezierPath* path = [UIBezierPath bezierPath]; 
[aPath moveToPoint:CGPointMake(50.0, 50.0)]; 
[aPath addLineToPoint:CGPointMake(10.0, 10.0)]; 
[aPath addLineToPoint:CGPointMake(10.0, 50.0)]; 
[aPath closePath]; 

Vous pouvez aussi, bien sûr, ajouter des courbes (les Bézier!) Et d'autres formes. Ensuite, pour dessiner, utilisez l'appel [aPath stroke] dans la méthode drawRect de votre vue.

Pour plus d'informations, voir le iPad Programming Guide

+0

Thanx samkass pour la réponse, je connais UIBezierPath et comment l'utiliser, mais je n'ai peut-être pas expliqué ce dont j'avais exactement besoin. mon application est similaire à une carte mais avec une image en arrière-plan qui remplace la carte, dans cette image je n'ai que quelques zones dédiées qui peuvent relier les deux points (similaire aux routes dans une carte) et en connectant deux points I veulent que le Chemin soit à travers ces zones dessinables seulement. Espérons que cela explique plus clairement ce dont j'ai besoin et merci pour l'aide à nouveau. Ghaith – Ghaith

+0

@Ghaith: Rien dans votre commentaire n'explique pourquoi UIBezierPath n'est pas suffisant pour dessiner de tels chemins. – Chuck

1

Cela semble être un problème qui est pas vraiment lié à l'élaboration de l'itinéraire.

Vous souhaitez trouver le chemin le plus court d'un point à un autre, en fonction de certains critères - par exemple, où vous pouvez et ne pouvez pas vous déplacer. Je ne vois pas ce problème comme quelque chose que vous pouvez résoudre en dessinant, mais en calculant réellement les différentes manières possibles et ensuite en les comparant. Lorsque vous avez décidé quel est le meilleur itinéraire. Le dessin est assez simple.

Comment vous y parviendrez en décidant que je ne suis pas sûr - désolé. Mais vous devriez probablement jeter un oeil à quelques algorithmes de plus court chemin. Mais cela signifie probablement que vous devez représenter l'image sous-jacente comme un motif, ou une série de nœuds, mais les problèmes graphiques ne sont pas ma tasse de thé, donc je ne sais pas trop comment. Juste une note de côté - Si le nombre de façons possibles d'obtenir du point A au point B est grand, cela peut devenir un problème de calcul, et vous devez vous assurer que l'iPhone peut gérer.

(cela devrait probablement être un commentaire quelque part, mais comme je ne peux pas encore et je voulais encore partager mes deux cents, il est devenu une réponse.)

Edit:

Je viens de penser Aproach vraiment naïf! - Pour le plaisir surtout, mais je ne pouvais pas me retenir de poster.

Supposons que vous ayez une représentation de l'image. Quelles parties ne peuvent pas être parcourues et quelles parties peuvent être. Chaque pixel qui peut être parcouru est représenté par un 1, et tous les autres pixels sont représentés par un 0. Ainsi, les pixels représentés par 1s peuvent être considérés comme des nœuds sur lesquels nous pouvons voyager. Chaque nœud peut atteindre au plus 8 autres nœuds - les pixels adjacents.

Et le poids de déplacement entre deux nœuds pourrait être défini comme 1. Mais nous devons tenir compte du fait que voyager dans une diagonale est une plus grande distance de sorte que le poids devrait être sqrt (2).

Maintenant, nous avons un grand nombre de nœuds - chacun avec des poids entre eux. De là, nous pouvons appliquer un djikstra-algorithm pour trouver le meilleur itinéraire.(peut-être qu'un autre algorithme est plus avantageux à ce stade - mais djikstras est le seul que je connaisse).

hum, je me demande comment cela serait une mauvaise solution. ... encore une fois, vous ne voulez probablement pas cette solution ...

EDIT 2:

Je le dis encore une fois que cela est probablement pas la meilleure façon de le faire! Vous devriez sérieusement demander à quelqu'un avec plus d'expérience dans les algorithmes et dans les problèmes graphiques. - C'était quelque chose que je pensais à 3 heures du matin et c'était surtout pour rigoler.

0

Si votre question concerne le calcul de routes au lieu de tracer des routes, c'est un problème totalement différent. L'algorithme standard pour trouver des routes efficaces dans un espace donné sont les algorithmes "A *" (prononcés A-star), qui sont typiquement ce que les jeux de stratégie en temps réel utilisent lorsque vous cliquez sur une unité et lui dites "y aller". Il a également de nombreuses utilisations dans l'IA lors de la recherche d'une transition à travers un espace.

Ce n'est pas facile de bien faire les choses. Il pourrait être plus facile de trouver un bon moteur de jeu qui inclut déjà une implémentation A * et l'intégrer dans votre logiciel.

Questions connexes