【问题标题】:Wrong area calculation objective-c?错误的面积计算objective-c?
【发布时间】:2025-12-30 15:50:07
【问题描述】:

我有一个包含 5 个 CGPoints(v0、v1、v2、v3、v4)的数组,它们是这样实现的形状的顶点:

_arrayVertex = [[NSMutableArray alloc] initWithObjects:[NSValue valueWithCGPoint:v0], [NSValue valueWithCGPoint:v1], [NSValue valueWithCGPoint:v2], [NSValue valueWithCGPoint:v3], [NSValue valueWithCGPoint:v4], nil];

然后,我用这些点计算面积:

- (float)calculateArea {

    float area = 0;
    int N = (int)_arrayVertex.count;

    for (int i = 0; i < N-1; i++) {

        float term = ([_arrayVertex[i] CGPointValue].x * [_arrayVertex[i+1 % N] CGPointValue].y -
                  [_arrayVertex[i+1 % N] CGPointValue].x * [_arrayVertex[i] CGPointValue].y)/2.0;

        area += term;
    }

    return fabsf(area);

}

面积计算正确吗?我错过了什么吗?提前谢谢你。

【问题讨论】:

  • 你在哪里添加绿色形状?在哪个视图中?
  • 在主视图中,查看更新的问题。
  • _lines.frame = self.view.bounds?
  • 形状现在更接近点,但它的绘制超出了屏幕的限制,并且点不适合顶点

标签: ios objective-c geometry polygon area


【解决方案1】:

sbim:

- (float)calculateArea {

    float area = 0;
    int N = (int)_arrayVertex.count;

    for (int i = 0; i < N; i++) {

        float term = ([_arrayVertex[i] CGPointValue].x * [_arrayVertex[(i+1) % N] CGPointValue].y -
              [_arrayVertex[(i+1) % N] CGPointValue].x * [_arrayVertex[i] CGPointValue].y)/2.0;

        area += term;
    }

    return fabsf(area);

} 

【讨论】:

  • 返回与使用模数相同的值
  • 好吧,我的错。我认为正确的做法是从 0 循环到 N,并保持模数。我编辑了我的答案。
  • 会崩溃,因为数组中有5个对象,N的值为6,当i=N时会抛出异常
  • 如果 _arrayVertex 包含 5 个对象,那么 _arrayVertex.count 给你 6 个?
  • 我的错,我的意思是 N 将返回 5,但是数组从 0 开始,所以当 i = 5 时,在数组的位置 5 中什么都没有,因为点在位置 0, 1、2、3 和 4。