我正在编写一个程序,它将改变三角形的坐标(一次一个坐标),以便创建一个新的三角形,然后测量新的周长(总共> 100个三角形)。
我有下面的周边功能,但我很困惑,我一次只能改变三角形的一个点,同时仍然在某个时间点改变三个点中的每个点(现在我只是改变ptA 100次,但我宁愿改变ptA 35次,ptB 35次等)。另外,当我运行如下程序时,为什么它只给出5个周长而不是110?
var theClasses = $("#anObj").attr("class");
答案 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
。