gpt4 book ai didi

iphone - 在 Objective-C 中使用 C 函数(适用于 iPhone)

转载 作者:搜寻专家 更新时间:2023-10-30 19:53:48 26 4
gpt4 key购买 nike

'大家好。我自称是 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”等。你得到了这么多条目,但没有一个必须做这个! :) 只是想让你知道我在发帖之前试过谷歌。

好的,我的问题:

  1. 如何从 Objective-C 调用 pnpoly?
  2. 我使用什么类型来调用它? (int 很好,但是 float*vertx 显然是一个 float 组.. 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 变量或调用它的例程。

我知道这要求很多......但它真的让我感到困惑。谁能帮我?非常感谢。

最佳答案

你可以调用它。 Objective-C 只是 C API 的前端,也是一种将方法重写为函数的方式(无论如何,某种近似...),因此您可以像在 C 代码中一样调用 C 函数。

- (int)doWhatever {
// ...
int hitTest = pnPoly(/*blah*/);
return hitTest;
}

您也可以毫无问题地在 Objective-C 中使用 C 基本类型,例如 int 和 float。所以用 float 调用函数 :)。如果您需要将此类值存储在基础集合类(如 NSArray)中,那么您可以将它们包装在一个名为 NSNumber 的类中。

NSNumber *someFloat = [NSNumber numberWithFloat: f];
float usefulValue = [someFloat floatValue];

关于iphone - 在 Objective-C 中使用 C 函数(适用于 iPhone),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2193826/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com