我正在写一个程序,它将改变一个三角形的坐标(一次一个坐标),以便创建一个新的三角形,然后测量新的周长(总共超过100个三角形)。
我有下面的周长函数,但是我很困惑如何一次只改变三角形的一个点,同时在某个时间点仍然改变三个点中的每一个(现在我只改变了100次ptA,但是我宁愿改变ptA 35次,ptB 35次,等等)。另外,当我运行下面的程序时,为什么它只给出5个周长而不是110?

double find3Ddistance (double pt0[], double pt1[]);
double find3Dperimeter (double pt0[], double pt1[], double pt2[]);

int main(){
    double ptA[3] = {0,0,0}; //values for testing perimeter function
    double ptB[3] = {6,0,0};
    double ptC[3] = {0,8,0};

    for (i = 0; i < 110; ++i) {
      find3Dperimeter(ptA, ptB, ptC);
      ++ptA[i];
      }
      return 0;
}

double find3Ddistance (double pt0[], double pt1[]) {
    double x = pt0[0] - pt1[0];
    double y = pt0[1] - pt1[1];
    double z = pt0[2] - pt1[2];
    double dist;
    dist = pow(x,2) + pow(y,2) + pow(z,2);
    dist = sqrt(dist);
    return dist;
}

double find3Dperimeter (double pt0[], double pt1[], double pt2[]) {
    double one = find3Ddistance(pt0, pt1);
    double two = find3Ddistance(pt1, pt2);
    double three = find3Ddistance(pt2, pt0);
    double perimeter = one + two + three;
    printf("Perimeter: %lf", perimeter);
    return perimeter;
}

最佳答案

在0到109之间修改i的ptA[i]。不正确,您应该只更改ptA[0]、ptA[1]或ptA[2]。
例如,可以更改此部分:

for (i = 0; i < 110; ++i) {
    find3Dperimeter(ptA, ptB, ptC);
    ++ptA[i];
}

像这样:
for (i = 0; i < 35; ++i) {
    find3Dperimeter(ptA, ptB, ptC);
    ++ptA[0];
    ++ptB[1];
    ++ptC[2];
    find3Dperimeter(ptA, ptB, ptC);
    ++ptA[1];
    ++ptB[2];
    ++ptC[0];
    find3Dperimeter(ptA, ptB, ptC);
    ++ptA[2];
    ++ptB[0];
    ++ptC[1];
}

这只是一个例子,但不必每次循环只调用find3Dperimeter一次。

关于c - 使用for()循环操作三角形值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33439740/

10-09 08:22