我正在写一个程序,它将改变一个三角形的坐标(一次一个坐标),以便创建一个新的三角形,然后测量新的周长(总共超过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/