'大家好。我承认自己是一名 iPhone 编程的新手(拥有 30 年的 Perl 和 Web 背景)...但上周我决定跳进这个领域,并购买了几本好书。经过阅读超过 1000 页的内容和理解,我已经可以开始编写一个不错的第一个 Native 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”等答案,但你会发现有很多条目,但没有一个与此有关! :) 我只是想让你知道在发帖之前我已经尝试过谷歌了。
好的,我的问题是:
1.如何从Objective-C调用pnpoly?
2.使用什么类型进行调用?(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