ODE質åã»èŠæåé5!
ãŸãïŒããã«ããODEã®FAQãèªãã§ããã³ã¡ã³ããé¡ãããŸãïŒ
ODE質åã»èŠæïŒïŒã®ã³ã¡ã³ããïŒïŒïŒä»¶ã«ãªããŸããã®ã§ïŒæ°ãã質åãèŠæã¯ODE質åã»èŠæïŒïŒã«ãé¡ãããŸãïŒ
ãªããç§ã®ã³ã¡ã³ãããèªåã®åªåã«ããåé¡ã解決 ãããå Žåã«ãåé¡ã®åå ããããã°æçš¿ããŠé ããšå€§å€å©ãããŸãããã®æ å ±ã¯ODEã®åå¿è ã«ãšã£ãŠéèŠãªãã®ã§ããããçšåºŠããŸããŸãããFAQã«æ² èŒããããšæããŸãã®ã§ãååã®ã»ã©ãããããé¡ãããŸãã
ã§ããã
ãåçããããšãããããŸãã
èšèãè¶³ããªããŠãããŸãããããŒããŒãããã®æäœã¯ã§ããŠããã®ã§ãããå é床ã»ã³ãµãŒãªã©ã䜿ã£ãŠPCã®å€éšãããæäœåºæ¥ããã§ããïŒ
ãã§ããïŒ
åããŸããŠïŒ
demura.netãžããããïŒ
ããŠïŒã質åã®å€éšå ¥åãšã¯ïŒããŒããŒãã®æäœã§ããïŒããããªãïŒODEè¬åº§ïŒïŒãšODEæ¬ã®ïŒïŒããŒãžã«èª¬æããããŸãïŒ
ã§ã
å§ããŸããŠã
æè¿ODEãã€ãã£ãŠããã®ã§ãããODEã¯å€éšããå ¥åããŠæäœãããããšã¯å¯èœãªã®ã§ããããïŒ
ãåçããããšãããããŸãã
ä»å¹Žã®åæ¥ç ç©¶ã§ODEãåããŠäœ¿ãããšã«ãªããæ¯æ¥æ©ã¿ãªããããœã³ã³ã«åãã£ãŠãŸãã»ã»ã»ãç¬
ãŸã ãŸã åå¿è ã§ããããªãããšããã£ã±ãããã®ã§ããŸããäžè©±ã«ãªãããšããããããããŸããããã®ãšãã¯ãŸããããããé¡ãèŽããŸãïœïŒãŒãŒïŒïœ
ã°ãã£ããïŒ
ã¯ãããŸããŠïŒ
æããããã¬ã質åããããšãããããŸãïŒODEæ¬ã«ã¯ãã®èŸºã®èšè¿°ããããã¥ããããã§ããïŒãæ¬ïŒïŒããŒãžã®ç¬¬ïŒãã©ã°ã©ãã«èšè¿°ããããŸãïŒ
ïŒïŒããŒãžã®ããã°ã©ã 1.2ã®nearCallback颿°ã§ã¯ïŒïŒïŒè¡ç®ã®if (isGround)æãïŒå°é¢ã®è¡çªã ããèæ ®ããèŠå ã«ãªã£ãŠããã®ã§ïŒãã®ifæãåé€ããã°ïŒ¯ïŒ«ã§ãïŒ
è¬åº§ïŒã«ããã®èª¬æãè£è¶³ããŸãïŒ
åå¿è ã«è¶ ããããããããã°ãšæç§æžãç®æããŠããã®ã§ïŒãšãŠãåèã«ãªãã³ã¡ã³ãã§ããïŒãããããšãããããŸããïŒ
ã§ã
è¡çªæ€åºã«é¢ããŠè³ªåã§ãã
å°é¢ãšã®è¡çªã ãã§ã¯ãªããç©äœå士ã®è¡çªãæ€åºãããã®ã§ããã»ã»ã»ã
ãããããã°ç©äœå士ã®è¡çªã«é¢ããããã°ã©ã ãæããŠãã ããïœïŒ_ _ïŒïœ
ã§ããã
ããããšãããããŸããã
dJointGetHingeAngle (JointID)ããããªã dJointSetHingeAngle (JointID)
ãããã°äŸ¿å©ãªã®ã«ãªãããã§ããããã
ã§ããã
ããããŸãããããããšãããããŸãã
mif805ããïŒ
ãä¹ ãã¶ãã§ããïŒ
ODEã§ã¯ïŒãžã§ã€ã³ãã¯ææãªã®ã§å§¿å¢ã¯ãããŸããïŒãžã§ã€ã³ãã§çµåãããŠããïŒãªã³ã¯ã®è§åºŠãç¥ãããå Žåã¯ïŒdJointGetHingeAngle()ãªã©ã®APIã䜿ããŸãïŒ
ã質åã®åçã«ãªã£ãŠããã§ããããïŒ
ã§ã
ã§ããããããã«ã¡ãã
Jointã«ã€ããŠè³ªåãããã®ã§ãããJointã«ã
ïœBodyGetRotationã®ãããªå§¿å¢ãååŸãã颿°ã¯ãããŸããïŒ
ãªãå Žåã¯ã©ã®ããã«ããŠååŸãããããã®ã§ããããïŒ
ãåçãããããé¡ãããããŸãã
ãããŒããïŒ
ãžã§ã€ã³ãã®åæè§åºŠã¯ïŒãžã§ã€ã³ããçæããæãïŒ[rad]ã«ãªããŸãïŒ
äŸãã°ïŒïŒã€ã®ãªã³ã¯ã®æãè§åºŠÏ/4ãåæè§åºŠãšãããå Žåã¯ïŒçæ¹ã®ãªã³ã¯ãÏ/4å転ãããåŸã§ïŒãžã§ã€ã³ãã§ïŒã€ã®ãªã³ã¯ãçµåããŸãïŒ
ãã®çšåºŠã®åçã§ããããã§ããïŒ
ã§ã
åºæããŸ
ãã€ã埡äžè©±ã«ãªã£ãŠãããŸãm(–)m
ä»åã®è³ªåã¯ãJointã«é¢ããããšã§ãã
ãžã§ã€ã³ãã®è§åºŠã®åæèšå®ãè¡ããããšã(äŸãã°
Hinge JointãÏ/4ã ãæ²ãããšã)ãã©ã®ããã«èšå®ããã°è¯ãã®ã§ãããã?
ãã«ã¯ãããããªãç¶æ ã§åæèšå®ãè¡ãããã®ç¶æ ããã·ãã¥ã¬ãŒã·ã§ã³
ãå§ãããã®ã§ããããããã³ããããã°ãããããé¡ãèŽããŸã
takaããïŒ
解決ããŠäœããã§ããïŒæ¥è§ŠããåŸã«éåãããããäžæããçŸè±¡ã解決ããããã«ïŒæ¥è§Šã«é¢ãã颿°ãå ¥ãããšè§£æ±ºãããšããçå±ãããããŸããïŒ
å ·äœçã«æ¥è§Šã«é¢ãã颿°ã¯äœã§(nearCallback?)ïŒ ããïŒdWorldSetGravity()ãèšå®ããŠãããšããŠïŒäœæ éåãããããªããªã£ãã®ã§ããããïŒ
ååŠè ãééããç®æã¯ïŒæããå€ãã®æ¹ã«å ±éãããããã¥ããç®æã ãšæããŸãã®ã§ïŒè©³ããæããŠé ããã°æçãªæ å ±ã«ãªããšèããŸãïŒ
ãææ°ããããããŸããïŒãæéãããã°ã³ã¡ã³ããã ããïŒ
ã§ã
ãã¿ãŸãããèªåã§è§£æ±ºã§ããŸããã
çãæåéåãåããŠäžéããã®ã§ããã
ä»ã®ç©äœã«è¡çªããåŸã«ãéåãããããã«äžæãç¶ãããšããçŸè±¡ãèŠãããŸããã
æ¥è§Šé¢ä¿ã®é¢æ°ãæžãå¿ããŠããããã®ããã§ããã®é¢æ°ãå ¥ãããš
çŽããŸããã
takaããïŒ
ãã®æ å ±ã ãã§ã¯ããããŸããïŒ
ãã詳ããæããŠãã ããïŒ
ã§ã
ããŒã«ãèœäžããŠä»ã®ç©äœã«åœãã£ãåŸããã£ãšäžæãç¶ããŠããŸããŸãã
èœã¡ãŠããªãã®ã§ããäœãåå ãªã®ã§ããããïŒ
ãããããé¡ãããŸãã
ãã€ããïŒ
ODEæ¬ã®è©²åœç®æãšå šãåãåçã§ãïŒ
———————————
æŒç¿åé¡ã«é¢ããã³ã¡ã³ãããããšãããããŸãïŒ
ãã€ããã®ãææã®ãšããã®çŸè±¡ãèŠãããŸããïŒ
è§£æ±ºæ¹æ³ã¯ïŒã€ãããŸãïŒ
ïŒïŒcreateMonoBot颿°ã®æåŸã«ä»¥äžãå ããïŒ
dJointSetSliderParam(s_joint, dParamStopERP, 0.2);
dJointSetSliderParam(s_joint, dParamStopCFM, 1e-5);
ãµã³ãã«ããã°ã©ã ã§ã¯main颿°å ã§dWorldSetERP(), dWorldSetCFM()ã§ERPã1.0ïŒCFMã0.0ã«ããŠããŸãïŒããã¯Worldå ã®å šãŠã®ãžã§ã€ã³ãã«äœçšããŸãïŒERPãïŒãšããããšã¯ïŒã¹ãããã§é¢ç¯èª€å·®ãä¿®æ£ããŸãïŒãã®ãµã³ãã«ããã°ã©ã ã§ã¯ã¹ããããµã€ãºã0.01ãªã®ã§ïŒç¶æ³ã«ããé¢ç¯ã®å¯ååããªã³ã¯ãè¶ ããå ŽåããããŸãïŒæ¬¡ã®ã¹ãããã§é¢ç¯èª€å·®ãïŒã«ããããã«å€§ããªåããªã³ã¯ã«ãããããšã«ãªãïŒã¹ãŒããŒãžã£ã³ãããŠã©ããã«é£ãã§ããããšã«ãªããŸãïŒ
ä»åã®ãµã³ãã«ããã°ã©ã ã§ã¯ã¹ã©ã€ããŒãžã§ã€ã³ããåé¡ã«ãªãã®ã§ïŒãã®å¯ååã®äž¡ç«¯ã§äœçšããdParamStopERP, dParamStopCFMãäžã®ããã«èšå®ããã°OKã§ãïŒ
ïŒïŒãã¹ããããµã€ãºãå°ãããã
çŸç¶ã®ODEã§ã¯ææåã®èšç®ä»¥å€ã¯ïŒæ¬¡ã®ãªã€ã©ãŒæ³ã䜿ã£ãŠããããèšç®ç²ŸåºŠãé«ããªãã®ã§ïŒãã®ãããªçŸè±¡ãçããå ŽåããããŸãïŒãsimLoop 颿°ã®dWorldStep()ã®ã¹ããããµã€ãºã0.002ã«å€æŽãããšãã®ãããªçŸè±¡ãèŠãããªããªããŸããïŒãåœç¶ã§ããïŒã¹ããããµã€ãºãå°ãããããšç²ŸåºŠã¯åäžããŸããïŒé床ã¯é ããªããŸãïŒODEã®æ¬¡æããŒãžã§ã³1.0ããïŒæ¬¡ã®ã«ã³ã²ã¯ãã¿ãå®è£ ãããäºå®ã§ãïŒãããªããšæ¹åãããããããŸãããïŒåœç¶é床ã¯é ããªãã§ãããïŒ
ã§ã
ODEæ¬ã®ãšããã«ãæžãããã§ããïŒãã¡ãã®æ¹ããµããããå ŽæããšæãïŒå床æžã蟌ã¿ãããŠããã ããŸãïŒ
EX2.3ã§è³ªåããããŸãïŒ
ãã©ã¡ãŒã¿ã倿ŽããŠè©ŠããŠã¿ããšïŒããã©ã«ãã®400Nã§ã¯ã¡ãã£ãšããè·³ããªãã®ã«ïŒ
150Nã100Nã ãšç©ºã«å¹ã£é£ã¶ãããé£ãã§ãããŸãïŒ
åãå°ãããªã£ãã®ã«é£ãã§è¡ã£ãŠããŸããšããã®ã¯ã©ããã€ã¡ãŒãžãšåããªãã®ã§ããïŒ
äœãèµ·ãã£ãŠããã®ã§ããããïŒ
ãææé¡ããŸãïŒ
JPããïŒ
åããŸããŠïŒ
ãã®è³ªåã³ãŒããŒã§ã¯ODEã®æè¡çãªäºé ã«éå®ãããŠãã ããïŒããããå·¥åŠå šè¬ã§ããšåºãããŠç§ã®æã«è² ããŸããïŒïŒãªã³ã¯ãå°ºåè«ã®ã¢ãã«ãšããŠé©åãªã®ãç§ã«ã¯ããããããŸãïŒ
ãã¿ãŸãããïŒã質åã®å 容ãODEã®æè¡çãªè³ªåå 容ã«å€æããŠåæçš¿é ããŸããïŒãæããæ©æŠã«é¢é£ããããšã ãšæãã®ã§ãã…
ã§ã
ã¯ãããŸããŠJPãšç³ããŸãã
ODEã§ïŒãªã³ã¯ã®ç©äœã§å°ºåè«ã®åãããããããšæã£ãã®ã§ããããã³ãžãžã§ã€ã³ãããã®å Žã§éãããéãããããã ãã§ããšããŠãå°ºåè«ãšã¯èšããªãåããããŸãã
ã©ããã£ãããåã«é²ããããªåããå®çŸã§ãããæããŠããããªãã§ããããã
ãããããé¡ãããŸãã
ãããŒããïŒ
ã¯ãããŸããŠïŒ
>ãžã§ã€ã³ããçšããªãã§ç©äœã®å§¿å¢è§åºŠã®å¶éãè¡ãããšã¯
>ã§ããã®ã§ãããã??
ãã®ãããªAPIã¯ãªãã®ã§èªåã§äœããïŒå§¿å¢ãåžžã«èšæž¬ãïŒå¶éãããè§åºŠããå€ã«åºããïŒå察åŽã«åãå ããŠå¶éè§åºŠå ã«åãŸãããã«ããããšã§ãïŒæããïŒã質åã®æå³ãããããšïŒè§åºŠå¶éãæææ¡ä»¶ãšããããšããããšã§ãããããïŒåŸè ã§ã¯äžååã§ããïŒ
å·®ãæ¯ããªããã°ïŒããå ·äœçã«ãããã«ãªãããããšãæããŠé ããŸããïŒ
ã§ããã
ã¯ãããŸããŠãODEæŽ3ã¶æã®ãã®ã§ãã
ãžã§ã€ã³ããçšããªãã§ç©äœã®å§¿å¢è§åºŠã®å¶éãè¡ãããšã¯
ã§ããã®ã§ãããã??
ã§ããã
解決ããŸãããããããšãããããŸã
ãããŒããïŒ
Cèšèªã®ããã°ã©ã ã§ãïŒäŸãã°ïŒå転軞ã®ãã¯ãã«ã(1/sqrt(2), 1/sqrt(2), 0)ãšããŸãïŒãªãïŒå転軞ãã¯ãã«ã¯åäœãã¯ãã«ãšããŠãã ããïŒdRealã¯ODEã®å®æ°åã§ãïŒ
dReal axis_x = 1/sqrt(2), axis_y=1/sqrt(2), axis_ z=0;
dReal torque = 10; // [Nm]
axis_x *= torque;ã// axis_x = axis * torque
axis_y *= torque;
axis_z *= torque;
dBodyAddTorque(bodyID, axis_x, axis_y, axis_z)
ã§ã
ã§ããã
åå¿è ã®è³ªåã§ããããããªãã®ã§ããã
axis_xãtorqueãªã©ã¯ãã©ãå®çŸ©ããã°ããã?
*=ãäœãæå³ããŠããã®ã?
ããããŸããããããåçãããããé¡ãèŽããŸã
質åéäžã§åããŠããŸã£ãŠããŠãããŸããã§ããïŒ
ERPãCFMãããã©ã«ãå€ã§ãïŒ
å粟床ã§ã€ã³ã¹ããŒã«ãããšæããŸãïŒ
ããããšãããããŸãïŒå°ãããã£ãŠã¿ãŸãïŒãŸãïŒããããããŸãïŒ
å±±å£ããïŒ
解決ãããŸãããïŒ
ããïŒè§£æ±ºãããã®ãªãïŒã©ã®ããã«ããã解決ãããã³ã¡ã³ãé ããã°ïŒå€ãã®æ¹ã®åèã«ãªããšæããŸãïŒ
ãããããé¡ãããŸãïŒ
ã§ã
ã§ããã
ããããšãããããŸãã
ä»åŸãã€ãã€ãè§£ãããªãäºãåºãŠãããšæããŸãã®ã§
ãã®ãšãã¯ããããããããããŸãã
ãããŒããïŒ
>ãžã§ã€ã³ãææããªãç©äœã«å¯ŸããŠïŒç䟡å転ãã¯ãã«åãã«ãã«ã¯ãä»å ããŠå>転ããããã®ã§ããïŒå¯èœã§ããããïŒ
以äžã§ã¯ïŒåŠäœã§ããããïŒ
ç䟡å転軞ãã¯ãã«ãïŒaxis_x, axis_y, axis_z)ãšãïŒãã«ã¯ã®å€§ãããtorqueãšããŸãïŒ
axis_x *= torque;
axis_y *= torque;
axis_z *= torque;
dBodyAddTorque(bodyID, axis.x, axis.y, axis.z)
ãªãïŒããã¯dJointAddHingeTorque(dJointID j, dReal Torque)ã®ã³ãŒãã®äžéšãæ¹å€ãããã®ã§ãïŒ
ode-ããŒãžã§ã³çªå·/ode/src/joint.cppãåèã«ããŠãã ããïŒ
ã§ã
å±±å£ããïŒ
dNormalize4()ã¯ODE0.9ã§ã¯ïŒã¯ãªãŒã¿ããªã³ãæ£èŠåãããšãã«äœ¿ãããŠããŸãïŒçްãããªããŸããïŒdBodySetRotation()ïŒdBodySetQuaternion(), util.cppã®äžã®dxStepBody(), stepfast.cppã®äžã®moveAndRotateBody()ã®äžã§åŒã³åºãããŠããŸãïŒ
ãã®ãšã©ãŒã¯äœããã®åå ã§ïŒã¯ãªãŒã¿ããªã³ã«NaNïŒNot a Number)ãå ¥ã£ããšããªã©ã«çããŸãïŒ
ãŸãïŒdBodySetRotationãdBodySetQuaternionã䜿ã£ãŠããå Žåã¯ïŒåŒæ°ããããããªãããã§ãã¯ãïŒåé¡ãªãå Žåã¯ã¯ãªãŒã¿ããªã³ã®å€ã衚瀺ããŠã¿ãŠïŒãããã°ããŠã¿ãŠãã ããïŒ
ODEãå粟床ã§ã€ã³ã¹ããŒã«ããŠããå Žåã¯å粟床ã«å€æŽãïŒCFMãERPã®å€ã倿ŽãããšçŽããããããŸããïŒãŸãïŒæ©æŠä¿æ°MuãdInifinityãšæéå€ãæ··åšããããšãšã©ãŒãèµ·ãããšããå ±åããããŸããïŒstepsizeãå°ããããŠã¿ãŠãã ããïŒåŸã¯ïŒç©äœã®ã¢ãã«ïŒããã£ïŒãžã§ã€ã³ãã®äœçœ®é¢ä¿ïŒè»žã®èšå®ãªã©ïŒãæ£ããèšå®ãããŠããã確èªããããšã倧åã§ãïŒ
ã§ã
>ç§ã¯ãã®ãããªäºäŸãç¥ããŸãã
ãã¯ãã§ããªãã§ãããã»ã»ã»
ãã°ããåçããããšãããããŸãã
åããŸããŠã
ã³ã³ãã€ã«ã¯ã§ãããã§ãããå®è¡ããããšããã
this application has requested the runtime to terminate it in an unusual way please contact the applibcation’s support team for more information
ãšã
assertion “bNormalizationResult” failed in _dNormalize4()[../../include/ode/odemath.h]
ãšãåºãŠããŸããã
å€ãªè³ªåãããããŸããããåå¿è ãªã®ã§å¯ŸåŠæ³ãããããŸããã
ã©ãããã°å®è¡ã§ããã®ã§ããããïŒæããŠãã ããã
ã§ããã
è¿ éãªåçããããšãããããŸãïŒ
ïŒãããšãããžã§ã€ã³ãã§ææãããã«ïŒã€ã®ããã£ã«å¯ŸããŠä»»æè»žãŸããã®ãã«ïŒã¯ããããããšããæå³ã§ããããïŒ
ããã§ãïŒãžã§ã€ã³ãææããªãç©äœã«å¯ŸããŠïŒç䟡å転ãã¯ãã«åãã«ãã«ã¯ãä»å ããŠå転ããããã®ã§ããïŒå¯èœã§ããããïŒ
ã¢ããã€ã¹ãããããé¡ãèŽããŸãïŒ
ã®ã¶ã²ãããã
ã¯ããŸããŠã
ç§ã¯ãã®ãããªäºäŸãç¥ããŸããã
çŸç¶ã®ODEã¯ç©ååšã®äžéšã«äžæ¬¡ã®ãªã€ã©ãŒæ³ãå©çšããŠããããèšç®ç²ŸåºŠãé«ããªãã®ã§ãã®ãããªçšéã«ã¯åããªããšæããŸããæ¬¡ã®ããŒãžã§ã³ã¢ããã§ã¯ïŒæ¬¡ã®ã«ã³ã²ã¯ãã¿ãå©çšå¯èœã«ãªãäºå®ã§ãããããªããšããã®ãããªã¢ããªã±ãŒã·ã§ã³ãéçºããæçŸ©ãã§ãŠããã§ãããã
ã§ã
å§ããŸããŠ
æè¿ODEã䜿ãå§ããè ãªã®ã§ãã
äžã€ã䌺ããããããšããããŸã
ããããã·ãã¥ã¬ãŒã·ã§ã³ãªã©ã§
SimulinkãšvisualNastran4Dã®ãããªæ§é è§£æãœãããªã©ã
ãªã³ã¯ãããŠããã®ãè¡ãäºäŸãããèŠãããã®ã§ãã
åãããã«SIMULINKãšODEããªã³ã¯ãããŠ
ã·ãã¥ã¬ãŒã·ã§ã³ãè¡ãããšã¯å¯èœãªã®ã§ãããã
ãããŒããã
ã¯ãããŸããŠã
å€ãã®å Žåããžã§ã€ã³ãã§ããã£ïŒåäœïŒãææãããã®ãžã§ã€ã³ãã«å¯ŸããŠdJointAddHingeTorque()ã§ãã«ã¯ããããŸãã
ãã®éããã³ãžãžã§ã€ã³ãã®å転軞ãä»»æè»žã«èšå®ããã°ãããšæããŸãã
ãããšãããžã§ã€ã³ãã§ææãããã«ïŒã€ã®ããã£ã«å¯ŸããŠä»»æè»žãŸããã®ãã«ã¯ããããããšããæå³ã§ããããïŒ
ã§ã
ã¯ãããŸããŠïŒODEã§å°ãããããªãããšãããã®ã§è³ªåãããŠäžããïŒ
ããã£ã«å¯ŸããŠä»»æè»žåãã«ãã«ã¯ãå ããã«ã¯ã©ããããããã®ã§ããããïŒ
ballããã
ODEãFAQ: ODEã®ãããã質åã®B.9ãã芧ãã ããã
ODEå éšã®æ°å€èšç®ã«ãããšã©ãŒã§ãã
ãªã³ã¯ããžã§ã€ã³ããªã©åæäœçœ®ã®èšå®ã«èª€ãããªãå Žåã¯ã
dWorldSetERP, dWorldSetCFM, soft_erp, soft_cfm, muããªã©ã®ãã©ã¡ãŒã¿ã調æŽãããšåé¿ã§ããããšããããŸãã
ç¹ã«, CFMã®å€ã倧ãããããšæ¹åããå Žåãå€ãã§ãããã¡ãªã¿ã«ãçŸåšã®CFM, ERPã®å€ã¯ããã€ã§ããïŒ
ãŸããODEãå粟床ã§ã€ã³ã¹ããŒã«ããŠããªãå Žåã¯ãå粟床ã§ã€ã³ã¹ããŒã«ããããšããå§ãããŸãã
ã§ã
å°ãã質åã§ãããŸããã»ã»ã»
ã·ãã¥ã¬ãŒã·ã§ã³ã¯ã§ããŠããã®ã§ããDrawStuff Messages ã«
ODEãMessage 3: LCP internal error, s
ããã»ãŒããã
ODEæ¬ã«ã¯å転è¡åã«é¢ãããµã³ãã«ããã°ã©ã ããªãã£ãã§ãããããã»ãŒããã®ãããã§ODEè¬åº§ãå å®ããããšãã§ããŸããã
ãŸããã³ã¡ã³ããã ããã
ã§ã
demuãããããããšãããããŸãã
é åã®äžŠã³ãçŽãããšãã解決ããŸããã
ODEè¬åº§25ã倧å€åèã«ãªããŸããã
ããã»ãŒããã
ODEæ¬ãè²·ãäžãããããšãããããŸãã
ãºããªé åã®äžŠã³ãéããŸããODEã®å転è¡åé åã®äžŠã³ã«ã€ããŠã¯ODEæ¬ã®P103ã«èšèŒããŠããŸãã®ã§ããã¡ããåèã«ããŠãã ããã
ãŸããODEè¬åº§ïŒïŒïŒå転è¡åãšRoll-Pitch-Yawè§ã«ã説æäžŠã³ã«ãµã³ãã«ããã°ã©ã ãæ²èŒããŸããã®ã§ããããåèé¡ããŸããã
ã§ã
ã¯ãããŸããŠã
å転è¡åã«ã€ããŠè³ªåãããŠãã ããã
ç©äœã®å転è¡åããODEæ¬ã®P150ã®åŒ6.12-6.14ã䜿ã£ãŠ
ããŒã«ããããããšãŒè§ãæ±ããããšæããŸãã
dBodyGetRotationã䜿ãã
rot = dBodyGetRotation(base.body);
r11=*(rot+0);
r12=*(rot+4);
r13=*(rot+8);
r21=*(rot+1);
r22=*(rot+5);
r23=*(rot+9);
r31=*(rot+2);
r32=*(rot+6);
r33=*(rot+10);
p=atan2(-r31, sqrt(r32*r32+r33*r33) );
y=atan2(r21,r11);
r=atan2(r32,r33) );
ãšããŠã¿ãã®ã§ãããã©ããããŸããããŸããã
åºé±ç®ãªå€ãåºãŠããŠããŸããŸãã
äžå¿è§åºŠãå€ãããšå€ãå€ããã®ã§ããâŠã
å転è¡åã®é åã®é åºãééã£ãŠãããã§ãããããã
å転è¡åã¯ãµã€ãºã4×3ã§ã4è¡ç®ã¯å šãŠ0ã§
r11,r21,r31,r41,r12,r22…ãšããé åºã§é åã«æ ŒçŽããããšããèªèã§ãã£ãŠããŸãã§ããããã
ãããããé¡ãããŸãã
ãè¿äºé ããŸããããã¿ãŸããã
demuããããããšãããããŸãã
ç¬¬ïŒæ®µéã§å³åŸå·ŠåŸããŠããã®ã§å©ãããŸããã
ãŸãããã«æžãããšãã¯ãšãã·ã¯ãé¡ãããŸããã
demuãã
ãè¿äºããããšãããããŸãïŒ
LGPLãšBSD-style Licenseã®ã©ã€ã»ã³ã¹ã確èªããŠã¿ãŸãã
ãŸããé åžã®ããã«ã¯ããã¹ããã¡ã€ã«ãåæã«é åžããããã«èŽããŸãã
ããããšãããããŸããã
ããããŒããïŒ
ã¯ãããŸããŠïŒ
æ¥åã®è¡çªã«é¢ããã¯ãªãã®ã§ïŒã©ã°ããŒããŒã«ãäžè§ã¡ãã·ã¥ã§äœæããŠãã ããïŒ
ã§ã
shuããïŒ
ODEã¯LGPLãšBSD-style Licenseã®ïŒéã©ã€ã»ã³ã¹ã§ãïŒåé åžãããšãã¯ã©ã¡ãã奜ããªæ¹ã®ã©ã€ã»ã³ã¹ã«åŸã£ãŠããã°è¯ãã§ãïŒODEã®ã©ã€ã»ã³ã¹å šäœã«é¢ããREADME.txtïŒLGPLã«é¢ããLICENSE.TXT,
BSDã«é¢ããLICENSE-BSD.TXTãåæã«é åžããå¿ èŠããããŸãïŒ
ã§ã
åã³ã¡ã§ããODEã«é¢ããŠã¯åå¿è ã§ããããšãã·ã¯ãé¡ãããŸãã
æ©éã§ãã質åã§ããã©ã°ããŒããŒã«ãäœãããã®ã§ãããæ¥å圢ãçæããã«ã¯ã©ãããã°ããã®ã§ããïŒ
ã©ã€ã»ã³ã¹ã«é¢ãã質åã§ãã
ode.dllãšdrawstuff.dllãåé åžããããšã¯å¯èœã§ããããïŒ
åé åžãããšãã«æ°ãã€ããããšã¯ãããŸããïŒ
çŸåšode.dllãšdrawstuff.dllãªã©ããœãŒã¹ã³ãŒããšåããã©ã«ãã«å ¥ããŠéçºãããŠããŸããããããããšã§ODEãã€ã³ã¹ããŒã«ãããŠããªãããœã³ã³ã§ãéçºãè¡ãããšãã§ããããã§ãã
å°æ¥çã«MFCãªã©ã§äœã£ãWindowsã¢ããªã±ãŒã·ã§ã³ãODEãã€ã³ã¹ããŒã«ãããŠããªãããœã³ã³ã§ãèµ·åã§ããããã«ãode.dllãªã©ãexeãã¡ã€ã«ãšåããã©ã«ãã«å ¥ããŠé åžããããšèããŠããŸãã
ããã§ãã©ã€ã»ã³ã¹ã®åé¡ããã£ãããããšå±éºãªã®ã§ã質åãããŠããã ããŸããã
èªåãäœã£ãã¢ããªã±ãŒã·ã§ã³ãode.dllãªã©ãšå«ããŠãããäžã§é åžããŠãããã®ã§ããããïŒ
ããããŸããïŒããããšãããããŸãïŒ
ãŸããäœããã£ãããã®ãšãã¯ããããããããããŸãïŒ