C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: Visual C++ 質問


(過去ログ 141 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■82688 / inTopicNo.1)  Visual C++ 質問
  
□投稿者/ サラリーマンZ (1回)-(2017/01/26(Thu) 18:37:27)

分類:[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
{
}

}
}
}
引用返信 編集キー/
■82690 / inTopicNo.2)  Re[1]: Visual C++ 質問
□投稿者/ とっちゃん (421回)-(2017/01/27(Fri) 10:29:01)
No82688 (サラリーマンZ さん) に返信
> 計算を続けていくと、条件に合わないときのUP[m]、LP[m]の値が、条件が合った時の値(前状態)の値を代入してしまいます。
> 条件が合わないときには強制的に0を入れようと思い、if文のelse()にUP[m]=0、LP[m]=0としてみると、
> 常に0になってしまいます。何かわかる方いましたら是非アドバイス頂ければ助かります。
>&nbsp;
UP[m], LP[m]&nbsp;への代入処理が、r, t のループの最内で、r,&nbsp;t のいずれかの値が変わるたびに毎回行っています。

この処理だと、UP[m], LP[m] への代入処理は、それ以前の値の状況によらず、r == 30, t == 34&nbsp;の時の処理結果だけが利用されていると思いますが、それでいいのでしょうか?

引用返信 編集キー/
■82695 / inTopicNo.3)  Re[2]: Visual C++ 質問
□投稿者/ サラリーマンZ (2回)-(2017/01/27(Fri) 12:59:29)
No82690 (とっちゃん さん) に返信
> ■No82688 (サラリーマンZ さん) に返信
>>計算を続けていくと、条件に合わないときのUP[m]、LP[m]の値が、条件が合った時の値(前状態)の値を代入してしまいます。
>>条件が合わないときには強制的に0を入れようと思い、if文のelse()にUP[m]=0、LP[m]=0としてみると、
>>常に0になってしまいます。何かわかる方いましたら是非アドバイス頂ければ助かります。
> >&nbsp;
> UP[m], LP[m]&nbsp;への代入処理が、r, t のループの最内で、r,&nbsp;t のいずれかの値が変わるたびに毎回行っています。
>
> この処理だと、UP[m], LP[m] への代入処理は、それ以前の値の状況によらず、r == 30, t == 34&nbsp;の時の処理結果だけが利用されていると思いますが、それでいいのでしょうか?
>

回答有難うございます。まさしくそうです!

r==30, t==34の時の処理結果だけが利用されています。

これを、r=0〜30、t=0〜34の結果処理、全配列データの値で結果処理する場合はどうしたらよいでしょうか?
引用返信 編集キー/
■82698 / inTopicNo.4)  Re[3]: Visual C++ 質問
□投稿者/ とっちゃん (422回)-(2017/01/27(Fri) 15:21:09)
No82695 (サラリーマンZ さん) に返信
> r==30, t==34の時の処理結果だけが利用されています。
>
> これを、r=0〜30、t=0〜34の結果処理、全配列データの値で結果処理する場合はどうしたらよいでしょうか?

R[r,t] と UP[m] の関係がわからないので何とも言えません。

今の計算式を見る限り、R[r,t] ごとに m=0 ; m<49 の条件で計算し、その結果を保持したいように見えます。

そうであれば、UP, LP は一元配列にはできないので、r,t ごとに49個の値を持たせる3次元配列にする必要があると思います。

いずれにしても、UP, LP の個々の要素にはどのような計算結果が格納されているべきなのかがわからないと、望む回答は得られません。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -