用iPhone绘制路线

时间:2010-08-22 17:56:30

标签: iphone objective-c

我正在尝试创建一个iPhone应用程序,它可以绘制两个点之间的路径(类似于Google地图)但是我想使用任何其他图像作为背景而不是地图,这两个点之间的路径可能不是直的,可能有多条路径从一个点到另一个点,然后我想绘制两点之间的最短路径。

我尝试使用CGContext& CGPath,但我堆积了。

你能帮助我吗?

感谢名单,

盖斯

3 个答案:

答案 0 :(得分:1)

我认为您正在寻找UIBezierPath。您可以添加简单的线条/多边形,例如:

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];

当然,您也可以添加曲线(bezier ones!)和其他形状。然后使用视图的drawRect方法中的[aPath stroke]调用来绘制它。

有关详细信息,请参阅iPad Programming Guide

答案 1 :(得分:1)

这似乎是一个与绘制路线无关的问题。

您希望找到从一个点到另一个点的最短路径,给定某些标准 - 例如,您可以和不能移动的位置。我没有把这个问题视为你可以用绘图解决的问题,而是通过实际计算不同的可能方式然后比较它们。当你决定哪条路线最好的时候。绘图很简单。

你怎么决定我实际上不确定 - 抱歉'回合那个。但是你应该看看一些最短路径算法。但这可能意味着你必须将底层图像表示为一个模式或一系列节点,但图形问题不是我的一杯茶,所以我不确定如何。

只是旁注 - 如果从A点到B点的可能方式很多,这可能会成为计算问题,您必须确保iPhone可以管理。

(这应该是某个地方的评论,但由于我还不能,我仍想分享我的两分钱,它就成了一个答案。)

编辑:

我只是想到了天真的态度! - 主要是为了好玩,但我无法阻止自己发布。

假设您有图像的表示。什么部分不能旅行,哪些部分可以。可以行进的每个像素由1表示,并且每个其他像素由0表示。因此,由1表示的像素可以被视为我们可以行进的节点。

每个节点最多可以到达8个其他节点 - 相邻像素。并且任何两个节点之间的行进权重可以设置为1.但是我们必须考虑到在对角线上行进的距离更大,因此权重应该是sqrt(2)。

现在我们有了很多节点 - 每个节点都有权重。从这里我们可以应用djikstra-algorithm来找到最佳路线。 (也许其他一些算法在这一点上更有用 - 但是djikstras是我唯一熟悉的算法。)

哼哼,想知道解决方案会有多糟糕。 ......再次,你可能不想要这个解决方案...

编辑2:

我会再说一遍,这可能不是最好的方法!你应该认真地问一下在算法和图形问题上有更多经验的人。 - 这是我在凌晨3点想到的,主要是为了笑。

答案 2 :(得分:0)

如果您的问题是关于计算路线而不是绘制路线,那么这是一个完全不同的问题。用于在给定空间中找到有效路线的标准算法是“A *”(发音为A-star)算法,这些算法通常是当您单击一个单元并告诉它“去那里”时实时策略游戏使用的算法。在搜索通过空间的过渡时,它在AI中也有很多用途。

但是,要做到正确并不容易。找到一个已经包含A *实现并将其集成到您的软件中的优秀游戏引擎可能更容易。