169 tdble DrTq, DrTq0, DrTq1;
171 tdble spinVel0, spinVel1;
173 tdble spdRatioMax, commomSpinVel;
174 tdble deltaSpd, deltaTq, bias, lockTq, biassign;
175 tdble engineReaction;
183 DrTq = differential->
in.
Tq;
188 inTq0 = differential->
inAxis[0]->
Tq;
189 inTq1 = differential->
inAxis[1]->
Tq;
191 commomSpinVel = (
tdble) (fabs(spinVel0) + fabs(spinVel1));
192 if (commomSpinVel != 0) {
193 tdble spdRatio = (
tdble) fabs(spinVel0 - spinVel1) / commomSpinVel;
195 switch (differential->
type) {
198 tdble spiderTq = inTq1 - inTq0;
199 DrTq0 = (DrTq + spiderTq)*0.5f;
200 DrTq1 = (DrTq - spiderTq)*0.5f;
204 if (DrTq > differential->
lockInputTq || DrTq < -differential->lockBrakeInputTq) {
217 spdRatioMax = differential->
dSlipMax - DrTq * differential->
dSlipMax / lockTq;
219 if (spdRatio > spdRatioMax) {
220 deltaSpd = (spdRatio - spdRatioMax) * commomSpinVel / 2.0f;
221 if (spinVel0 > spinVel1) {
222 spinVel0 -= deltaSpd;
223 spinVel1 += deltaSpd;
224 bias = -(spdRatio - spdRatioMax);
226 spinVel0 += deltaSpd;
227 spinVel1 -= deltaSpd;
228 bias = (spdRatio - spdRatioMax);
233 tdble spiderTq = inTq1 - inTq0;
234 DrTq0 = (DrTq*(1.0f + bias*biassign) + spiderTq)*0.5f;
235 DrTq1 = (DrTq*(1.0f - bias*biassign) - spiderTq)*0.5f;
239 if (spinVel0 >= spinVel1) {
240 DrTq0 = DrTq * differential->
dTqMin;
241 DrTq1 = DrTq * (1.0f - differential->
dTqMin);
243 deltaTq = differential->
dTqMin + (1.0f - (
tdble) exp(-fabs(differential->
viscosity * (spinVel0 - spinVel1)))) * differential->
dTqMax;
244 DrTq0 = DrTq * deltaTq;
245 DrTq1 = DrTq * (1.0f - deltaTq);
250 DrTq0 = DrTq1 = 0.0f;
267 meanv = (spinVel0 + spinVel1) / 2.0f;
270 engineReaction = engineReaction / meanv;
271 if (engineReaction != 0.0f) {
272 spinVel1 *= engineReaction;
273 spinVel0 *= engineReaction;
const char * GfParmGetStr(void *parmHandle, const char *path, const char *key, const char *deflt)
Get a string parameter from the parameter set handle.
tdble GfParmGetNum(void *handle, const char *path, const char *key, const char *unit, tdble deflt)
Get a numerical parameter from the parameter set handle.