質問編集履歴

1

TorqueMapを利用する関数のスクリプトを追加

2017/12/04 03:37

投稿

kimityan555
kimityan555

スコア7

test CHANGED
File without changes
test CHANGED
@@ -161,3 +161,123 @@
161
161
 
162
162
 
163
163
  おそらくとっても単純なミスな気がしますが、3時間にらめっこしても自分にはわかりませんでした。
164
+
165
+
166
+
167
+
168
+
169
+
170
+
171
+ ###追加
172
+
173
+ TorqueMapを利用する関数
174
+
175
+ ```c#
176
+
177
+ //エンジンの駆動トルクを配列から算出する
178
+
179
+ public float EngineTorque(float RPM, float Axel)
180
+
181
+ {
182
+
183
+ float Axel0, Axel50, Axel100;
184
+
185
+ int i = 0;
186
+
187
+
188
+
189
+ //配列の中からRPMの次に大きい回転数を探す
190
+
191
+ while (true)
192
+
193
+ {
194
+
195
+ if (TorqueMap [i, 0] <= RPM) {
196
+
197
+ i++;
198
+
199
+ }
200
+
201
+ }
202
+
203
+ //開度ごとにトルクを算出
204
+
205
+ Axel0 = TorqueMap[i - 1,1] + (TorqueMap[i,1] - TorqueMap[i - 1,1]) * RPM / (TorqueMap[i,0] - TorqueMap[i - 1,0]);
206
+
207
+ Axel50 = TorqueMap[i - 1,2] + (TorqueMap[i,2] - TorqueMap[i - 1,2]) * RPM / (TorqueMap[i,0] - TorqueMap[i - 1,0]);
208
+
209
+ Axel100 = TorqueMap[i - 1,3] + (TorqueMap[i,3] - TorqueMap[i - 1,3]) * RPM / (TorqueMap[i,0] - TorqueMap[i - 1,0]);
210
+
211
+ //Axelに応じた値を出力
212
+
213
+ if (Axel < 0.5) {
214
+
215
+ return Axel0 + Axel50 * Axel * 2;
216
+
217
+ } else {
218
+
219
+ return Axel50 + Axel100 * Axel * 2;
220
+
221
+ }
222
+
223
+ }
224
+
225
+
226
+
227
+ //エンジンの抵抗を配列から算出する
228
+
229
+ public float EngineResistanceTorque(float RPM)
230
+
231
+ {
232
+
233
+ int i = 0;
234
+
235
+
236
+
237
+ //配列の中からRPMの次に大きい回転数を探す
238
+
239
+ while (true)
240
+
241
+ {
242
+
243
+ if (TorqueMap [i, 0] <= RPM) {
244
+
245
+ i++;
246
+
247
+ RPM = RPM - 500;
248
+
249
+ }
250
+
251
+ }
252
+
253
+ i = 5;
254
+
255
+ //抵抗をトルクを算出
256
+
257
+ return TorqueMap[i - 1,3] + (TorqueMap[i,3] - TorqueMap[i - 1,3]) * RPM / (TorqueMap[i,0] - TorqueMap[i - 1,0]);
258
+
259
+ }
260
+
261
+
262
+
263
+ //エンジンの回転状態、タイヤへの出力をシミュレーションする
264
+
265
+ public float EngineOutputTorque(float GearRaito_T, float GearRaito_F, float Axel, float Clutch)
266
+
267
+ {
268
+
269
+ return EngineTorque (EngineRPM, Axel) * Clutch * GearRaito_T * GearRaito_F;
270
+
271
+ //EngineRPM = EngineRPM + (EngineTorque (EngineRPM, Axel) - EngineTorque (EngineRPM, Axel) * Clutch * GearRaito_T * GearRaito_F - EngineResistanceTorque(EngineRPM)) / 8f * 10f * 35f * 180f / 3.14f;
272
+
273
+ EngineRPM = 1000;
274
+
275
+ }
276
+
277
+ ```
278
+
279
+ 外部から呼び出されるのはEngineOutputTorqueのみです。
280
+
281
+ 上の二つは配列のがばがばなデータからそれらしい値を計算して出すようにしたつもりのプログラムでたぶん式は間違っています。
282
+
283
+ EngineOutputTorqueの式も、とりあえず頭の中の理論で組み立てたもので、おそらく間違っています。