使用for()循环操作三角形值

时间:2015-10-30 15:39:32

标签: c function for-loop

我正在编写一个程序,它将改变三角形的坐标(一次一个坐标),以便创建一个新的三角形,然后测量新的周长(总共> 100个三角形)。

我有下面的周边功能,但我很困惑,我一次只能改变三角形的一个点,同时仍然在某个时间点改变三个点中的每个点(现在我只是改变ptA 100次,但我宁愿改变ptA 35次,ptB 35次等)。另外,当我运行如下程序时,为什么它只给出5个周长而不是110?

var theClasses = $("#anObj").attr("class");

3 个答案:

答案 0 :(得分:2)

这是你的问题:

++ptA[i];

数组ptA只有3个元素,但i的范围是0到109,所以你引用了数组越界。这导致了不确定的行为。

假设您想要增加三个维度中的一个,您可以这样做:

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

或者全部三个:

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

如果你想每个点做35次,只需使用3个独立的循环:

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

答案 1 :(得分:1)

你修改ptA [i]为i在0到109之间。这是不正确的,你应该只改变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。

答案 2 :(得分:1)

试试这段代码:

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 (int i = 0; i < 110; ++i) {
      int j = i%3;
      find3Dperimeter(ptA, ptB, ptC);
      if(j==0) ++ptA[j];
      else if (j==1) ++ptB[j];
      else ++ptC[j];
    }
    return 0;  
}

double find3Ddistance (double pt0[], double pt1[]) {
    /*is the same*/
}

double find3Dperimeter (double pt0[], double pt1[], double pt2[]) {
    /*is the same */
}

这样你可以迭代110次,每次ptX只改变35次。 模块操作员应该帮助您每次更改一个数组。它使j循环使用作为三个点的索引的值0,1,2