|
分類:[C++/CLI]
コードそのまま貼り付けてしまいます。乱雑で申し訳ない。 2次元配列 R[r,t] の値をfor文使って計算させているコードです。 計算で得られたR[r,t]の値がある値のときに、別の1次元配列の値 UP[m]、LP[m]の値にSRU[m]、SRL[m]の値を代入させるために コードの後半、if文を使ってます。 R[r,t]の値がif文の条件に合わないときには UP[m]とLP[m] は0を返したいのですが、うまくいきません。
計算を続けていくと、条件に合わないときのUP[m]、LP[m]の値が、条件が合った時の値(前状態)の値を代入してしまいます。 条件が合わないときには強制的に0を入れようと思い、if文のelse()にUP[m]=0、LP[m]=0としてみると、 常に0になってしまいます。何かわかる方いましたら是非アドバイス頂ければ助かります。
for (r = 0; r < 31; r++) { for (t = 0; t < 35; t++) { X[r, t] = WXC + ((Size1 - Size2) / 60 * r + (Size2/2))*cos((CARO + RPMwafer)*M_PI*Count*TR / 30000 + (360 / 36 * t)*M_PI / 180); Y[r, t] = WYC + ((Size1 - Size2) / 60 * r + (Size2/2))*sin((CARO + RPMwafer)*M_PI*Count*TR / 30000 + (360 / 36 * t)*M_PI / 180);
VX[r, t] = (WXC + ((Size1 - Size2) / 60 * r + Size2 / 2)*cos((CARO + RPMwafer)*M_PI*Count*TR / 30000 + (360 / 36 * t)*M_PI / 180)) - (WXC0 + ((Size1 - Size2) / 60 * r + Size2 / 2)*cos((CARO + RPMwafer)*M_PI*(Count - 1)*TR / 30000 + (360 / 36 * t)*M_PI / 180)); VY[r, t] = (WYC + ((Size1 - Size2) / 60 * r + Size2 / 2)*sin((CARO + RPMwafer)*M_PI*Count*TR / 30000 + (360 / 36 * t)*M_PI / 180)) - (WYC0 + ((Size1 - Size2) / 60 * r + Size2 / 2)*sin((CARO + RPMwafer)*M_PI*(Count - 1)*TR / 30000 + (360 / 36 * t)*M_PI / 180));
R[r, t] = sqrt((X[r, t] * X[r, t]) + (Y[r, t] * Y[r, t]));
if (X[r, t] < 0) {M = 180;} else if (X[r, t] > 0 && Y[r,t] <0) {M = 360;} else {M = 0;}
T[r, t] = atan(Y[r, t] / X[r, t]) * 180 / M_PI + M;
VXPU[r, t] = ((-R[r, t] * (RPMupper*M_PI / 30000 * Count*TR))*sin(T[r, t] / 180 * M_PI)) - ((-R[r, t] * (RPMupper*M_PI / 30000 * (Count - 1)*TR))*sin(T[r, t] / 180 * M_PI)); VYPU[r, t] = ((R[r, t] * (RPMupper*M_PI / 30000 * Count*TR))*cos(T[r, t] / 180 * M_PI)) - ((R[r, t] * (RPMupper*M_PI / 30000 * (Count - 1)*TR))*cos(T[r, t] / 180 * M_PI));
VXPL[r, t] = ((-R[r, t] * (RPMlower*M_PI / 30000 * Count*TR))*sin(T[r, t] / 180 * M_PI)) - ((-R[r, t] * (RPMlower*M_PI / 30000 * (Count - 1)*TR))*sin(T[r, t] / 180 * M_PI)); VYPL[r, t] = ((R[r, t] * (RPMlower*M_PI / 30000 * Count*TR))*cos(T[r, t] / 180 * M_PI)) - ((R[r, t] * (RPMlower*M_PI / 30000 * (Count - 1)*TR))*cos(T[r, t] / 180 * M_PI));
VRXU[r, t] = VX[r, t] - VXPU[r, t]; VRYU[r, t] = VY[r, t] - VYPU[r, t];
VRXL[r, t] = VX[r, t] - VXPL[r, t]; VRYL[r, t] = VY[r, t] - VYPL[r, t];
if (R[r, t]>PlatenPCD1/2 || R[r,t]<PlatenPCD2/2) { VRXU[r, t] = 0; VRYU[r, t] = 0; VRXL[r, t] = 0; VRYL[r, t] = 0; }
SRU[r, t] = sqrt((VRXU[r,t]*VRXU[r,t])+(VRYU[r,t]*VRYU[r,t])); SRL[r, t] = sqrt((VRXL[r,t]*VRXL[r,t])+(VRYL[r,t]*VRYL[r,t]));
SR[r, t] = SRU[r, t] + SRL[r, t];
for (m = 0; m < 49; m++) { if (R[r, t]<(PlatenPCD1/2)-((PlatenPCD1-PlatenPCD2)/100*m)&& R[r,t]>(PlatenPCD1/2)-((PlatenPCD1-PlatenPCD2)/100*(m+1))) { UP[m] = SRU[r, t]; LP[m] = SRL[r, t]; } else { }
} } }
|