这是一个似乎不起作用的示例代码。对于所有迭代,我得到相同的X和Y值(它们都等于零)。有人能帮我解决这个错误吗?
#include <iostream>
using namespace std;
int main()
{
double coord[4][2];
int div_x, div_y;
coord[1][0]=2;
coord[1][1]=0;
coord[2][0]=2;
coord[2][1]=4;
coord[3][0]=0;
coord[3][1]=4;
div_x = 4;
div_y = 3;
double a =0,b=0,c=0,d=0,e=0,f=0,g=0,h=0;
a = coord[1][0]+coord[2][0]+coord[3][0];
b = coord[1][0]+coord[2][0]-coord[3][0];
c = coord[2][0]-coord[1][0]+coord[3][0];
d = coord[2][0]-coord[1][0]-coord[3][0];
e = coord[1][1]+coord[2][1]+coord[3][1];
f = coord[1][1]+coord[2][1]-coord[3][1];
g = coord[2][1]-coord[1][1]+coord[3][1];
h = coord[2][1]-coord[1][1]-coord[3][1];
for (int i=0; i<div_y+1; i++){ // loop all rows (blue)
for (int j=0; j<div_x+1; j++){ // loop all nodes of one row (green)
double w = -1 + (2/div_x)*j;
double s = -1 + (2/div_y)*i;
double X = (a+b*w+c*s+(w*s*d));
double Y = (e+f*w+g*s+(h*s*w));
cout<<"\nX "<<X<<endl;
cout<<"\nY "<<Y<<endl;
}
}
return 0;
}
.
答案 0 :(得分:0)
你的问题在于这里的分歧:
double w = -1 + (2/div_x)*j;
double s = -1 + (2/div_y)*i;
2/div_x
和2/div_y
是整数除法。在C ++中划分两个integer类型的值时,除法将作为整数除法执行。由于div_x
为4且div_y
为3,因此它们的结果均为0.作为整数除法:
2 / 4 = 0
2 / 3 = 0
解决此问题的最简单方法是对两个值中的一个使用double值,这会导致双重除法。例如:
double w = -1.0 + (2.0/div_x)*j;
double s = -1.0 + (2.0/div_y)*i;
您可能还需要考虑使用float
类型而不是double
,除非您确实需要超过float
精度,大约是7位十进制数。
答案 1 :(得分:0)
在您的代码中,div_x
和div_y
为int
,因此(2/div_x)
和(2/div_y)
为整数除法,并评估为0
所以w
和s
都始终等于-1
。
您可以使用:(2.0/div_x)
和(2.0/div_y)