'大家好。我自称是 iPhone 编程新手(拥有更长的 Perl 和 Web 背景——30 年)……但上周我冒险买了几本好书。在死记硬背并阅读了 1000 多页之后,并且对它有了很好的理解之后,我已经朝着第一个优秀的原生 iPhone 应用程序迈进了。我的问题是这样的:我不知道如何在 Objective-C 中执行简单的地理(纬度/经度)多边形点例程。我有两种方法可以做到这一点。一个用 C 语言编写(第一个代码示例),一个用 JavaScript 语言编写(第二个代码示例):
// this is the poly.h file
int pnpoly(int nvert, float *vertx, float *verty, float testx, float testy);
// this is the poly.c file
#include "poly.h"
int pnpoly(int nvert, float *vertx, float *verty, float testx, float testy){
int i, j, c = 0;
for (i = 0, j = nvert-1; i < nvert; j = i++) {
if ( ((verty[i]>testy) != (verty[j]>testy)) &&
(testx < (vertx[j]-vertx[i]) * (testy-verty[i]) / (verty[j]-verty[i]) + vertx[i]) )
c = !c;
}
return c;
}
或者这个(在 JavaScript 中):
function _isPointInPoly(poly, pt){
for(var c = false, i = -1, l = poly.length, j = l - 1; ++i < l; j = i)
((poly[i].y <= pt.y && pt.y < poly[j].y) || (poly[j].y <= pt.y && pt.y < poly[i].y))
&& (pt.x < (poly[j].x - poly[i].x) * (pt.y - poly[i].y) / (poly[j].y - poly[i].y) + poly[i].x)
&& (c = !c);
return c;
}
(如果我能让它们转换,任何一个都可以)
所以,为了尝试这个...我将 .h 文件和 .c 文件与我的 iPhone 项目一起放入 xcode 中。现在唯一的问题是如何从 Objective-C 调用它并获得结果..:)
顺便说一句:我昨晚搜索了大神谷歌来得到这个问题的答案,但只是尝试搜索“在 Objective-C iPhone 应用程序中包含 C”等等。你得到了很多条目,但没有一个与此有关! :) 只是让你知道我在发帖之前尝试过谷歌。
好吧,我的问题:
- 如何从 Objective-C 调用 pnpoly?
- 我使用什么类型来称呼它? (int 很好,但是 float
*vertx 显然是一个浮点数组.. NSArray 没有
——我能找到)
(编辑:这里有更多信息。我正在寻求帮助构建也将被传递的数组)
这个问题没有被完全问清楚。
例程(在 Objective-C 中)将如下所示:(假设编码正确)
NSMutableArray *latitudeArray = [[NSMutableArray alloc] init];
NSMutableArray *longitudeArray = [[NSMutableArray alloc] init];
// coordinates surrounding 1 inifite loop.
[latitudeArray addObject:@"37.32812557141369"];
[longitudeArray addObject:@"-122.0320253896318"];
[latitudeArray addObject:@"37.32821852349916"];
[longitudeArray addObject:@"-122.0289014325174"];
[latitudeArray addObject:@"37.33021046381746"];
[longitudeArray addObject:@"-122.0289300638158"];
[latitudeArray addObject:@"37.33042111092124"];
[longitudeArray addObject:@"-122.0279574092159"];
[latitudeArray addObject:@"37.33395972491337"];
[longitudeArray addObject:@"-122.0279263955651"];
[latitudeArray addObject:@"37.33363270879559"];
[longitudeArray addObject:@"-122.0320527775551"];
[latitudeArray addObject:@"37.32812557141369"];
[longitudeArray addObject:@"-122.0320253896318"];
int nvert = [[latitudeArray count] intvalue];
// 37.33189399206268 x -122.0296274412866 should return true
float testx =37.33189399206268;
float testy =-122.0296274412866;
int y_or_n = pnpoly(int nvert, float *vertx, float *verty, float testx, float testy);
我应该明确表示我正在学习 Objective-c,但发现了 C 例程 - 所以不确定如何构造调用它的 C 变量或调用它的例程。
我知道这要求很高……但这对我来说真的很困惑。谁能帮我?
非常感谢。
Jann