ODEã§å­¦ã¶C言語 [Step1:ç‰©ä½“ã®æç”»]

2009-06-11
By demu
step1.cppã®å®Ÿè¡Œç”»é¢

step1.cppã®å®Ÿè¡Œç”»é¢

今回ã¯ä½•ã‚‚ãªã‹ã£ãŸä»®æƒ³ç©ºé–“ã«ç‰©ä½“を表示ã•ã›ã¦ã¿ã¾ã—ょã†ï¼ŽODEã§ã¯ã„ã‚ã„ã‚ãªå½¢çжãŒã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã™ï¼Žã“ã“ã§ã¯ãã®ä¸­ã§ã‚‚ä½¿ã„æ–¹ãŒæœ€ã‚‚ç°¡å˜ãªçƒã‚’表示ã•ã›ã¾ã™ï¼Ž

/* step1 çƒã®è¡¨ç¤ºã€€*/
#include "dm1.h"

double R[12];                  // 回転行列(å§¿å‹¢)ã®å€¤ã‚’入れるé…列
double p[3] = {0.0, 0.0, 1.0}; // ä½ç½®(x,y,z)[m]
double r = 0.2;                // åŠå¾„ [m]

void simLoop(int pause)        /***  シミュレーションループ ***/
{
  dsDrawSphere(p,R,r);         // çƒã®æç”»
}

int main()         /*** main関数 ***/
{
  dmLoop(800, 600); // ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ«ãƒ¼ãƒ—ï¼ˆã‚¦ã‚¤ãƒ³ãƒ‰ã‚¦ã®æ¨ªï¼Œç¸¦ï¼‰
  return 0;
}

物体を3次元空間上ã«è¡¨ç¤ºã•ã›ã‚‹ãŸã‚ã«ã¯ï¼Œç‰©ä½“ã®ä½ç½®ã¨å§¿å‹¢ã‚’決ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ï¼ŽODEã§ã¯å§¿å‹¢ã‚’回転行列ã¨ã‚ˆã°ã‚Œã‚‹è¡Œåˆ—ã§è¡¨ã—ã¦ã„ã¾ã™ï¼Žãã®è¡Œåˆ—ã®è¦ç´ ã‚’æ ¼ç´ã™ã‚‹ã®ãŒé…列R[12]ã§ã™ï¼ŽãªãŠï¼Œä½ç½®ã¯è¦ç´ æ•°ï¼“個ã®doubleåž‹ã®é…列p[3]ã«æ ¼ç´ã—ã¦ã„ã¾ã™ï¼ŽãªãŠï¼ŒR[12]ã«ã¯è¬Žã®ãƒ˜ãƒƒãƒ€ãƒ•ァイルdm1.hã®ä¸­ã§å˜ä½è¡Œåˆ—ãŒè¨­å®šã•れã¦ã„ã¾ã™ï¼Ž

ä½ç½®ã®x座標(æ‰‹å‰æ–¹å‘)を表ã™å¤‰æ•°pã®1番目ã®è¦ç´ p[0]ã«ã¯0.0[m],yåº§æ¨™ï¼ˆå³æ–¹å‘), zåº§æ¨™ï¼ˆé«˜ã•æ–¹å‘)を表ã™p[1], p[2]ã«ã¯0.0[m], 1.0[m]ãŒè¨­å®šã•れã¦ã„ã¾ã™ï¼Žåº§æ¨™ç³»ã¯å³æ‰‹ç³»ã§ã™ã€‚ODEã§ã¯å˜ä½ç³»ã¯SIå˜ä½ç³»ã‚’考ãˆã¾ã™ï¼Žé•·ã•ã¯m,質é‡ã¯kg,力ã¯Nã¨ãªã‚Šã¾ã™ï¼Ž

ソースコードã®ãªã‹ã»ã©ã«ã‚ã‚‹simLoop関数ã«ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã§ã‚„りãŸã„ã“ã¨ã‚’書ãã¾ã™ï¼Žã“ã“ã§ã¯ï¼Œçƒã‚’表示ã—ãŸã„ã®ã§dsDrawSphere関数を使ã£ã¦ï¼Œä½ç½®p,姿勢R, åŠå¾„rã®çƒã‚’æç”»ã—ã¦ã„ã¾ã™ï¼ŽãªãŠã€ã“ã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã ã‘ã§ã¯ã‚ã‹ã‚Šã¾ã›ã‚“ãŒã€simLoop関数ã¯dmLoop関数ã®ä¸­ã§æ¯Žå›žå‘¼ã³å‡ºã•れã¦ã„ã¾ã™ã€‚

今回ã¯ã“れã§çµ‚ã‚りã§ã™ï¼Žã¾ãŸï¼Œã¾ãŸç°¡å˜ã§ã—ãŸã­ï¼Ž

  • ホームワーク1
    1. step1-090612b.zipをダウンロードã—,実行ã—ã¦ãã ã•ã„.
    2. çƒã®ä½ç½®ã¨å¤§ãã•を変更ã—ã¦ã¿ã¾ã—ょã†ï¼Ž
    3. 直方体を表示ã•ã›ã¦ãã ã•ã„.次ã®é–¢æ•°ã‚’使ã„ã¾ã™ï¼Ž
      • void dsDrawBox(const double p[3], const double R[12], const double sides[3])
      • 上ã¯é–¢æ•°ã®ãƒ—ロトタイプ宣言ã®å½¢å¼ãªã®ã§ï¼Œå‘¼ã³å‡ºã™ã¨ãã¯const doubleãªã©ã®åž‹åを入れã¦ã¯ã„ã‘ã¾ã›ã‚“.引数ãŒé…列ã®å ´åˆã¯ï¼Œã‚µãƒ³ãƒ—ルプログラムã®ã‚ˆã†ã«é…列åã ã‘を入れã¦ãã ã•ã„.
      • 1, 2番目ã®å¼•æ•°ã¯dsDrawSphereã®ã¨ãã¨åŒã˜ã§ã™ï¼Ž3番目ã®å¼•æ•°ã¯ç›´æ–¹ä½“ã®x,y,zæ–¹å‘ã®ã‚µã‚¤ã‚º[m]ãŒå…¥ã£ã¦ã„ã‚‹è¦ç´ æ•°3個ã®é…列ã§ã™ï¼Žä½ç½®ã‚’表ã™é…列pã¨åŒã˜ã‚ˆã†ã«åˆæœŸåŒ–ã™ã‚Œã°å¤§ä¸ˆå¤«ã§ã™ï¼ŽãªãŠ, doubleã®å‰ã«ã‚ã‚‹constã¯å€¤ã‚’変ãˆã¦ã¯ã„ã‘ãªã„ã¨ã„ã†æ„味ã§ã™ã€‚
    4. 円柱を表示ã•ã›ã¦ãã ã•ã„
      • void dsDrawCylinder(const double p[3], const double R[12],  float l, float r );
      • ã“ã“ã§ï¼Œlã¯é•·ã•,rã¯åŠå¾„ã§ã™ï¼Ž
    5. カプセルを表示ã•ã›ã¦ãã ã•ã„.
      • void dsDrawCapsule(const double p[3], const double R[12], float l,  float r );

Tags:

コメントをã©ã†ãž

メールアドレスãŒå…¬é–‹ã•れるã“ã¨ã¯ã‚りã¾ã›ã‚“。

2,274 views  (Since 2010-08-11)