<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>NPO法人 natural science</title>
    <link rel="alternate" type="text/html" href="http://www.natural-science.or.jp/" />
    <link rel="self" type="application/atom+xml" href="http://www.natural-science.or.jp/atom.xml" />
    <id>tag:www.natural-science.or.jp,2008-09-17://12</id>
    <updated>2010-03-09T15:05:06Z</updated>
    
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type 4.261</generator>

<entry>
    <title>ものづくり講座～春休み体験講座～のご案内</title>
    <link rel="alternate" type="text/html" href="http://www.natural-science.or.jp/article/20100309235122.php" />
    <id>tag:www.natural-science.or.jp,2010://12.9461</id>

    <published>2010-03-09T14:51:22Z</published>
    <updated>2010-03-09T15:05:06Z</updated>

    <summary> 　natural science カレッジ「ものづくり講座」とは、生徒が自分で...</summary>
    <author>
        <name>八重樫 和之</name>
        
    </author>
    
        <category term="ものづくり講座" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="ものづくり講座" label="ものづくり講座" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="体験講座" label="体験講座" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="春" label="春" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.natural-science.or.jp/">
        <![CDATA[<p>
<img src="http://www.natural-science.or.jp/images/20100309-1.gif" alt="ものづくり講座~春休み体験講座~" />
</p>
<p>
　natural science カレッジ「ものづくり講座」とは、生徒が自分で「つくり、考える」ことを通じて、単純な知識の暗記ではなく、知識を習得し活用するプロセスを重視した科学実験講座です。<br />
　春休み体験講座では、通常講座で行われている内容を四日間で行い、作る楽しさや、考える楽しさを知ってもらう短期講座です。電子工作をやってみたいけど、今まではんだを使ったことがない！という方でも大丈夫！！春休みを利用して、電子工作に挑戦してみよう！！
</p>
<img src="http://www.natural-science.or.jp/images/20100309-4.gif" alt="" style="float:right;margin:0px 0px 10px 20px" />
<h3 style="border:0px"><img src="http://www.natural-science.or.jp/images/20100309-2.gif" alt="風力発電計を作ろう!!" /></h3>
<p>

<span style="font-weight:600">対象＞ものづくり講座を初めて受講される方</span><br />
風力発電ってあるけど、実際どれくらいの風でエネルギーになるんだろう？プロペラとモーターを使い、風力発電計を作ります。プロペラに受けた風で発電し、どれくらいのエネルギーが発生したかを調べる電子回路を作成します。<br class="c" />
</p>
<img src="http://www.natural-science.or.jp/images/20100309-5.gif" alt="" style="float:right;margin:0px 20px 0px 20px" />
<h3 style="border:0px"><img src="http://www.natural-science.or.jp/images/20100309-3.gif" alt="デジタルタイマーを作ろう!!" /></h3>
<p>

<span style="font-weight:600">対象＞ものづくり講座受講経験者</span><br />
数字を表示できる７セグLEDを使って、デジタルタイマーを作ります。セットした時間をスイッチでスタート！数字がゼロになると音が鳴る、電子回路を作成します。
<br class="c" />
</p>
<h2>募集概要</h2>
<table>
<tr>
<td nowrap="nowrap" >
日時：</td><td>
2010年4月1日（木）～　4月4日（日）<br />
14:00 ～  16:00（毎回2時間授業)<br />
</td>
</tr>
<tr>
<td nowrap="nowrap" >
場所：</td><td>FiveBridge（仙台市青葉区北目町４－７HSGビル３階）<a href="http://maps.google.co.jp/maps?q=%E5%AE%AE%E5%9F%8E%E7%9C%8C%E4%BB%99%E5%8F%B0%E5%B8%82%E9%9D%92%E8%91%89%E5%8C%BA%E5%8C%97%E7%9B%AE%E7%94%BA%EF%BC%94%EF%BC%8D%EF%BC%97+HSG%E3%83%93%E3%83%AB3%E9%9A%8E&ie=UTF8&ll=38.254548,140.875915&spn=0.002751,0.006035&z=18" target="_blank">地図</a></td>
</tr>
<tr>
<td nowrap="nowrap" >
対象：</td><td>小学校1～6年生</td>
</tr>
<tr>
<td nowrap="nowrap" >入会金：</td>
<td>
<span style="font-weight:600">入会金は不要</span>ですが、初めての方は以下の費用が必要となります。<br />
１．保険代　1000円（年度内有効）<br />
２．はんだごてセット　2000円（はんだごて、はんだ、はんだ吸収線、こて先クリーナー）<br />
<span style="font-weight:600">
※はんだごてセットをご持参の場合には、上記の費用は必要ありません。
</span>
</td>
</tr>
<tr>
<td>申込み</td>
<td>
	<?php
	$kouzamei = "春休み体験講座";
	$nokori = "2010年4月1日（木）～4月4日（日）14:00 ～ 16:00";
	?>
<form action="http://www.natural-science.or.jp/colledge/index.php#contents" method="post">
<input type='hidden' name='kouzamei' value='<?php print $kouzamei ?>' />
<?php
if($nokori) print "<input value=\"$nokori\" style=\"width: auto;\" type=\"submit\" />";
else print "<input value=\"申込む\" style=\"width: 50px;\" type=\"submit\" />";
?>
<input name="flag" value="mousikomi1" type="hidden">
</form>
</td>
</tr>
<tr>
<td nowrap="nowrap" >費用：</td><td>1500円×４回</td>
</tr>
<tr>
<td nowrap="nowrap" >
主催：</td><td>NPO法人 natural science</td>
</tr>
<tr>
<td nowrap="nowrap" >
後援：</td><td>仙台市教育委員会</td>
</tr>
<tr>
<td nowrap="nowrap" >お問い合せ：</td><td>022-721-2035</td>
</tr>
</table>
<!--
<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="20100309-0.gif" src="http://www.natural-science.or.jp/images/20100309-0.gif" width="614" height="826" class="mt-image-none" style="" /></span>
-->]]>
        
    </content>
</entry>

<entry>
    <title>VisualC++ と OpenGL を利用した仮想物理実験室【18日目】ばね弾性力＋重力による運動（３次元）</title>
    <link rel="alternate" type="text/html" href="http://www.natural-science.or.jp/article/20100306155456.php" />
    <id>tag:www.natural-science.or.jp,2010://12.9459</id>

    <published>2010-03-06T06:54:56Z</published>
    <updated>2010-03-06T06:56:31Z</updated>

    <summary> 【17日目】ばね弾性力＋重力がある場合の運動方程式では、 ばねの変位が xyz...</summary>
    <author>
        <name>遠藤 理平</name>
        <uri>http://www.natural-science.or.jp/article/members/cat-12/</uri>
    </author>
    
        <category term="コンピュータ・シミュレーション講座 授業日誌" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="仮想物理実験室" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="opengl" label="OpenGL" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="visualc" label="VisualC++" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ばね弾性力" label="ばね弾性力" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="重力" label="重力" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.natural-science.or.jp/">
        <![CDATA[<p>
<a href="http://www.natural-science.or.jp/article/20100305003753.php">【17日目】ばね弾性力＋重力がある場合の運動方程式</a>では、
ばねの変位が xyz平面内の場合で、<span style="font-weight:600">ばね弾性力</span>と<span style="font-weight:600">重力</span>がボールに作用する場合の運動方程式の導出と、コンピュータでシミュレーションを行うためのアルゴリズムの導出を行ないました。
t=t_n[s]のときの加速度 a_n[m/s^2]は、
</p>
<div class="waku">
<div style="float:right">(18-1)</div>
<img src="http://www.natural-science.or.jp/images/20100302-13.gif" alt="差分方程式" />
</div>
<p>
となり、そのときのボールの位置 r_n = (x_n, y_n, z_n) によって決まる値となります。
L_n は、原点からボールまでの距離、
</p>
<div class="waku">
<div style="float:right">(18-2)</div>
<img src="http://www.natural-science.or.jp/images/20100302-14.gif" alt="差分方程式" />
</div>
<p>
です。コンピュータシミュレーションでは、
初期条件として、l_0 = 20.0[m]とし、１０個のボールの質量 m [kg]を変化させて運動の違いを確認します。
</p>
<h2>ばね弾性力＋重力による運動のための計算アルゴリズム</h2>
<h4>支柱の位置とボールの位置・速度・加速度の初期値</h4>
<p>
ばね定数を k、自然長 L[m] のばねの片側を固定した動かない支柱を原点に置き、ばねの反対側をボールつけ、x-y 平面上に伸ばします。時刻 t=t_n[s] のときのボールの位置を r_n とします。
</p>
<pre>
k = 10.0;    //ばね定数
L = 30.0;    //ばねの自然長
r = 20.0;    //ボールの初期半径
g =9.8
ball_r = 4.0;//ボールの半径

//支柱の定義
poll_x = 0.0;
poll_y = 0.0;
poll_z = 60.0;
poll_r = 5.0;  //半径
poll_h = 20.0; //高さ
</pre>

<h4>速度・位置を逐次計算するアルゴリズム</h4>
<pre>
//位置の計算
x  = x  + vx * dt;
y  = y  + vy * dt;
z  = z  + vz * dt;

l = sqrt(pow(ball[i].x,2)+pow(ball[i].y,2)+pow(poll_z-ball[i].z,2)); //&lt;-----支柱からボールまでの距離

//加速度の計算
ax = - k/ball[i].m * (1.0 - L/l) * ball[i].x;    //&lt;-----ばね弾性力からの寄与
ay = - k/ball[i].m * (1.0 - L/l) * ball[i].y;    //&lt;-----ばね弾性力からの寄与
az = - k/ball[i].m * (1.0 - L/l) * (ball[i].z-poll_z) -g;
//速度の計算
vx = vx + ax * dt;
vy = vy + ay * dt;
vz = vz + az * dt;
</pre>
<p>
このアルゴリズムでは誤差が大きく、時間と共に、単振動の振幅が大きくなってしまいます。
アルゴリズムの改善は、次に行ないます。
</p>

<h2>ばね弾性力による単振動のシミュレーション</h2>
<p>
動かない支柱にばねで繋がったボールが運動するシミュレーションです。運動は、ばね弾性力と重力による運動となります。
</p>
<div style="text-align:center">
<object 
    id="重力＋空気抵抗力による自由落下運動のシミュレーション" 
    width="512" height="512" 
    classid="CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95" 
    codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715" 
    standby="Loading MicrosoftR WindowsR Media Player components..." 
    type="application/x-oleobject">
    <param name="FileName" value="http://www.natural-science.or.jp/images/20100306a.m1v" />
    <!-- 自動再生の有無 --> 
    <param name="AutoStart" value="true" />
    <!-- コントローラー表示の有無 -->
    <param name="ShowControls" value="true" />
    <embed 
        name="プレーヤー名" 
        type="application/x-mplayer2" 
        pluginspage="http://www.microsoft.com/Windows/MediaPlayer/" 
        src="http://www.natural-science.or.jp/images/20100306a.m1v"
        width="512" height="512" 
        autostart="1" 
        showcontrols="0">
    </embed>
</object>
</div>

<h2>VisualC++ ＋ OpenGL プログラミング</h2>
<p>
「<a href="http://www.natural-science.or.jp/article/20091209225032.php">【０日目】仮想物理実験室の構築 （ver1.0）</a>」をベースにプログラミングします。上記で解説した逐次計算を行うアルゴリズムをプログラミングします。
</p>
<h3>ばねの定義</h3>
<p>
ばねの定義については、<a href="http://www.natural-science.or.jp/article/20100223233220.php">【14日目】ばね弾性力による運動：単振動運動</a>をご覧下さい。
</p>
<h3>仮想物理実験室変数の定義</h3>
<pre>
//////////////////////////////////////////////////////////////////////////
// 変数の定義
//////////////////////////////////////////////////////////////////////////
#define _BITMAP 0 //アニメーション作成用ビットマップの保存 0:しない　1:する
ofstream ofs1( &quot;ball1.data&quot; );
//--------------------------------------------------------
// 仮想物理実験室変数の定義
//--------------------------------------------------------
double t = 0.0;     //時刻
double dt= 0.05;    //時間刻み
int tn = 0;         //ステップ数
double k = 10.0;    //ばね定数
double L = 30.0;    //ばねの自然長
double l = 20.0;    //ばねの初期長
double g =9.8;      //重力加速度
double radian, radian_phi, radian_theta; 
double theta;

//支柱の定義
double poll_x = 0.0;
double poll_y = 0.0;
double poll_z = 60.0;
double poll_r = 5.0;  //半径
double poll_h = 20.0; //高さ

// ボールの定義
double ball_r = 4.0;//ボールの半径
struct BALL {
  double m;
  double x, y, z;
  double vx, vy, vz;
  double ax, ay, az;
};
const int N = 10;
BALL ball[N];
void SetUp(void){
  for(int i=0; i&lt;N; i++ ){
    radian = 2.0 * PI * double(i)/double(N);
    ball[i].m  = 2.0*double(i+1)/double(N); //ボールの質量
    ball[i].x  = l * cos(radian);
    ball[i].y  = l * sin(radian);
    ball[i].z  = poll_z; //ボールがめり込まないように
    ball[i].vx = 0.0;
    ball[i].vy = 0.0;
    ball[i].vz = 0.0;
    ball[i].ax = 0.0;
    ball[i].ay = 0.0;
    ball[i].az = 0.0;
  }
}
</pre>
<p>
ボールの位置「x,y,z」、速度「vx,vy,vz」、加速度「ax,ay,az」を
構造体「BALL」のメンバとします。「BALL」型の変数「ball1」を宣言と同時に初期値を設定しています。
</p>
<h3>速度・位置を逐次計算するアルゴリズム</h3>
<pre>
//--------------------------------------------------------
// 計算と物体の描画
//--------------------------------------------------------
void Calculate(){
  t = dt * double(tn);
  //ofs1 &lt;&lt; dt*tn &lt;&lt; &quot; &quot; &lt;&lt; ball1.x &lt;&lt; &quot; &quot; &lt;&lt; ball1.vx &lt;&lt; &quot; &quot; &lt;&lt; ball1.ax &lt;&lt;endl;
  for(int i=0; i&lt;N; i++){
    //位置の算出
    ball[i].x = ball[i].x + ball[i].vx * dt;
    ball[i].y = ball[i].y + ball[i].vy * dt;
    ball[i].z = ball[i].z + ball[i].vz * dt;

    l = sqrt(pow(ball[i].x,2)+pow(ball[i].y,2)+pow(poll_z-ball[i].z,2)); // 支柱からボールまでの距離

    //加速度の算出
    ball[i].ax = - k/ball[i].m * (1.0 - L/l) * ball[i].x;
    ball[i].ay = - k/ball[i].m * (1.0 - L/l) * ball[i].y;
    ball[i].az = - k/ball[i].m * (1.0 - L/l) * (ball[i].z-poll_z) -g;
    //速度の算出
    ball[i].vx = ball[i].vx + ball[i].ax * dt;
    ball[i].vy = ball[i].vy + ball[i].ay * dt;
    ball[i].vz = ball[i].vz + ball[i].az * dt;
  }
 tn++;
}
void DrawStructure(){
  for(int i=0; i&lt;N; i++){
    glPushMatrix();
      glMaterialfv(GL_FRONT, GL_AMBIENT, ms_silver.ambient);
      glMaterialfv(GL_FRONT, GL_DIFFUSE, ms_silver.diffuse);
      glMaterialfv(GL_FRONT, GL_SPECULAR, ms_silver.specular);
      glMaterialfv(GL_FRONT, GL_SHININESS, &amp;ms_silver.shininess);
      glTranslated(ball[i].x, ball[i].y, ball[i].z); //平行移動値の設定
      glutSolidSphere(ball_r, 20, 20);            //引数：(半径, Z軸まわりの分割数, Z軸に沿った分割数)
    glPopMatrix();
		//バネ
    l = sqrt(pow(ball[i].x,2)+pow(ball[i].y,2)+pow(poll_z-ball[i].z,2));
    if(acos(ball[i].x/(sqrt(pow(ball[i].x,2)+pow(ball[i].y,2)))) &lt;= PI/2.0 &amp;&amp; asin(ball[i].y/(sqrt(pow(ball[i].x,2)+pow(ball[i].y,2))))&gt;=0){
      radian_theta = asin((ball[i].y)/sqrt(pow(ball[i].x,2)+pow(ball[i].y,2)));
      radian_phi   = acos((ball[i].z-poll_z)/l);
    }else if(acos(ball[i].x/(sqrt(pow(ball[i].x,2)+pow(ball[i].y,2)))) &gt; PI/2.0&amp;&amp; asin(ball[i].y/(sqrt(pow(ball[i].x,2)+pow(ball[i].y,2))))&gt;0){
      radian_theta = acos((ball[i].x)/sqrt(pow(ball[i].x,2)+pow(ball[i].y,2)));
      radian_phi   = acos((ball[i].z-poll_z)/l);
    }else if(acos(ball[i].x/(sqrt(pow(ball[i].x,2)+pow(ball[i].y,2)))) &gt; PI/2.0 &amp;&amp; asin(ball[i].y/(sqrt(pow(ball[i].x,2)+pow(ball[i].y,2))))&lt;=0){
      radian_theta = PI-PI-asin((ball[i].y)/sqrt(pow(ball[i].x,2)+pow(ball[i].y,2)));
      radian_phi   = -acos((ball[i].z-poll_z)/l);
    }else if(acos(ball[i].x/(sqrt(pow(ball[i].x,2)+pow(ball[i].y,2))))&gt;=0 &amp;&amp; asin(ball[i].y/(sqrt(pow(ball[i].x,2)+pow(ball[i].y,2))))&lt;0){
      radian_theta = PI-2.0*PI+asin((ball[i].y)/sqrt(pow(ball[i].x,2)+pow(ball[i].y,2)));
      radian_phi   = -acos((ball[i].z-poll_z)/l);
    }
    //cout &lt;&lt; ball[i].x &lt;&lt; &quot; &quot; &lt;&lt; ball[i].y &lt;&lt; &quot; &quot; &lt;&lt; radian_phi/(2.0*PI) * 360.0 &lt;&lt; &quot; &quot; &lt;&lt;radian_theta/(2.0*PI) * 360.0 &lt;&lt; endl;
    glPushMatrix();
			glMaterialfv(GL_FRONT, GL_AMBIENT, ms_yellow_rubber.ambient);
			glMaterialfv(GL_FRONT, GL_DIFFUSE, ms_yellow_rubber.diffuse);
			glMaterialfv(GL_FRONT, GL_SPECULAR, ms_yellow_rubber.specular);
			glMaterialfv(GL_FRONT, GL_SHININESS, &amp;ms_yellow_rubber.shininess);	
			glTranslated(poll_x, poll_y, poll_z);
      theta = radian_theta/(2.0*PI) * 360.0;
		  glRotated( theta , 0.0,0.0,1.0);
      theta = radian_phi/(2.0*PI) * 360.0 ;
			glRotated(theta, 0.0,1.0,0.0);
      skSolidSpring(10, 10, 5, 1.0, 0.8, l);
		glPopMatrix();
  }
  //軸（円錐）
  glPushMatrix();
      glMaterialfv(GL_FRONT, GL_AMBIENT, ms_copper.ambient);
      glMaterialfv(GL_FRONT, GL_DIFFUSE, ms_copper.diffuse);
      glMaterialfv(GL_FRONT, GL_SPECULAR, ms_copper.specular);
      glMaterialfv(GL_FRONT, GL_SHININESS, &amp;ms_copper.shininess);
			glTranslated(poll_x, poll_y, poll_z);
      glutSolidCone(5.0,20.0,20,20);//引数：(半径, 高さ, Z軸まわりの分割数, Z軸に沿った分割数)
  glPopMatrix();
}
</pre>
<p>
位置「ball1.x」「ball1.y」「ball1.z」<br />
速度「ball1.vx」「ball1.vy」「ball1.vz」<br />
加速度「ball1.ax」「ball1.ay」「ball1.az」<br />
を逐次計算します。
先にも述べましたが、このアルゴリズムでは誤差が大きく、
時間と共に単振動の振幅が大きくなってしまいます。
アルゴリズムの改善は、次回行ないます。
</p>
<!--
<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="20100306-01.gif" src="http://www.natural-science.or.jp/images/20100306-01.gif" width="512" height="512" class="mt-image-none" style="" /></span>
-->
<mt:include module="仮想物理実験室　コンテンツ" />
<mt:include module="OpenGL入門　コンテンツ" />
]]>
        
    </content>
</entry>

<entry>
    <title>【2010.3.5】温泉たまご調理　再実験</title>
    <link rel="alternate" type="text/html" href="http://www.natural-science.or.jp/article/20100305234205.php" />
    <id>tag:www.natural-science.or.jp,2010://12.9457</id>

    <published>2010-03-05T14:42:05Z</published>
    <updated>2010-03-05T14:45:01Z</updated>

    <summary> 体験編は、自動温度制御装置の制作に必要な技術を習得します。 今回は、前回の温泉...</summary>
    <author>
        <name>佐瀬 一弥</name>
        
    </author>
    
        <category term="ロボティクス講座 授業日誌" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="制御" label="制御" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="温泉たまご" label="温泉たまご" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.natural-science.or.jp/">
        <![CDATA[<p>
体験編は、自動温度制御装置の制作に必要な技術を習得します。 今回は、前回の温泉たまご調理実験の反省をもとに実験条件を変えて、再実験を行いました。<br />
前回の経験から、より長い時間の調理が必要であることがわかりました。そこで、今回は前回の70℃を15分持続から70度を30分持続に変えることにしました。実験中は、ヒーターをオンにして持続したときの、比熱から求めた温度変化の予想と、前回の実験での実際の温度変化を比較して考察しました。実際の温度変化はしだいに勾配が緩やかになって90℃くらいで平衡状態になりました。これは予想の時点で無視していた熱の流出で説明できることを確認しました。<br />
今回の調理実験では満足のいく結果を得ることができました。黄身が前回よりも硬くなり、十分に熱することができたようです。<br />
今回再実験したように目的の状況を得るためには、対象とする物理現象をよく理解して、適切な出力をする必要があります。実験装置の構築には、ひとつひとつの回路や装置が何の役割をしているのかを確かめながら進めてきました。制御とは、目的実現のために持っている技術を駆使して影響力を行使することであり、その前提に、納得のいくまで現象を理解しようとする努力が必要です。実現できるおもしろさはもちろんのこと、それに至るまでに、どうしたら制御できるのか、起きている現象はどのように説明できるかを考えるおもしろさも感じてもらえたでしょうか。<br />
体験編で身に付けた毎回の積み重ねを大切にする姿勢で、基礎編へ進みましょう。

</p>
<p style="text-align:center">	
	<img 
	src="http://www.natural-science.or.jp/images/sase-100305-2.jpg" 
	alt="" /><br />
温泉たまご調理実験の様子
</p>
<!--
<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="sase-100305-2.jpg" src="http://www.natural-science.or.jp/images/sase-100305-2.jpg" width="438" height="329" class="mt-image-none" style="" /></span>
-->]]>
        
    </content>
</entry>

<entry>
    <title>【2010.3.5】マイコンボードのトラブルシューティング</title>
    <link rel="alternate" type="text/html" href="http://www.natural-science.or.jp/article/20100305225251.php" />
    <id>tag:www.natural-science.or.jp,2010://12.9456</id>

    <published>2010-03-05T13:52:51Z</published>
    <updated>2010-03-05T13:55:01Z</updated>

    <summary> N川くん(ものづくり講座6カ月,小4)はマイコンカーをつくっています。 マイコ...</summary>
    <author>
        <name>佐瀬 一弥</name>
        
    </author>
    
        <category term="応用編" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="トラブルシューティング" label="トラブルシューティング" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.natural-science.or.jp/">
        <![CDATA[<p>
N川くん(ものづくり講座6カ月,小4)はマイコンカーをつくっています。<br />
マイコンカーの回路はモータドライバ回路とマイコンボード、コントローラからなります。
前回、モータドライバを完成させたN川くんは前回からマイコンボードをつくっています。
マイコンボードがきちんと動作しているかを確認するには、
完成しているお手本の回路と組み合わせてモーターが回転するかを調べます。
N川くんのマイコンボードは一度では正しく動かず、片方のモーターが
動きませんでした。
原因はマイコンへの配線を左右反対にしていたことです。
これは体験編の時から気をつけていたことですが、
少し注意を怠るとよくしてしまうミスでもあります。
このようなミスは自分で回路図を見て直せるようにしましょう。
</p>
<p style="text-align:center">	
	<img 
	src="http://www.natural-science.or.jp/images/sase-100305-1.jpg" 
	alt="" /><br />
マイコンカー製作中
</p>
<!--
<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="sase-100305-1.jpg" src="http://www.natural-science.or.jp/images/sase-100305-1.jpg" width="369" height="277" class="mt-image-none" style="" /></span>
-->]]>
        
    </content>
</entry>

<entry>
    <title>【2010.03.05】モータードライバ回路を修理完了!!</title>
    <link rel="alternate" type="text/html" href="http://www.natural-science.or.jp/article/20100305224841.php" />
    <id>tag:www.natural-science.or.jp,2010://12.9455</id>

    <published>2010-03-05T13:48:41Z</published>
    <updated>2010-03-05T13:49:11Z</updated>

    <summary> モータードライバ回路製作中のM浦くん(小学校3年生,ものづくり講座1年)。 起...</summary>
    <author>
        <name>八重樫 和之</name>
        
    </author>
    
        <category term="応用編" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.natural-science.or.jp/">
        <![CDATA[
<p>モータードライバ回路製作中のM浦くん(小学校3年生,ものづくり講座1年)。
起動チェックをしてみると、片方のモーターのみ回ります。
これは、モータードライバの回路への電源供給がうまく出来ているが、片側のモーターへの出力、あるいはモータードライバへの入力がうまくいっていないことを意味しています。
そこで、配線を見てみると、マイコン-モータードライバ間の配線がショートしていました。
この部分を直し、モータードライバ回路完成です。
次回はマイコンボード製作を行いましょう!!</p>
<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="yattemiyou_100305.gif" src="http://www.natural-science.or.jp/images/yattemiyou_100305.gif" width="464" height="323" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></span></p>]]>
        
    </content>
</entry>

<entry>
    <title>VisualC++ と OpenGL を利用した仮想物理実験室【17日目】ばね弾性力＋重力がある場合の運動方程式</title>
    <link rel="alternate" type="text/html" href="http://www.natural-science.or.jp/article/20100305003753.php" />
    <id>tag:www.natural-science.or.jp,2010://12.9453</id>

    <published>2010-03-04T15:37:53Z</published>
    <updated>2010-03-04T15:40:37Z</updated>

    <summary> 【15日目】ばね弾性力がある場合の運動方程式（２次元）では、ばね弾性力がある場...</summary>
    <author>
        <name>遠藤 理平</name>
        <uri>http://www.natural-science.or.jp/article/members/cat-12/</uri>
    </author>
    
        <category term="コンピュータ・シミュレーション講座 授業日誌" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="仮想物理実験室" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="アルゴリズム" label="アルゴリズム" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ばね弾性力" label="ばね弾性力" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="運動方程式" label="運動方程式" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="重力" label="重力" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.natural-science.or.jp/">
        <![CDATA[<p>
<a href="http://www.natural-science.or.jp/article/20100228225603.php">【15日目】ばね弾性力がある場合の運動方程式（２次元）</a>では、<span style="font-weight:600">ばね弾性力</span>がある場合の運動方程式の導出と、コンピュータでシミュレーションを行うためのアルゴリズムの導出を行ないました。そして、<a href="http://www.natural-science.or.jp/article/20100223233220.php">【16日目】ばね弾性力による運動：単振動運動（２次元）</a>では、ばねが x-y 平面内で変位するばねの単振動のシミュレーションを行ないました。
</p>
<p>
本節では、xyz 空間内でばねが変位する場合をシミュレーションするためのアルゴリズムの導出をおこないます。
座標(0,0,z_{poll})に置かれた動かない支柱に、自然長 L_0[m] のばねの片側を固定し、反対側をボールつけ、xyz 空間内に伸ばします。時刻 t[s] のときのボールの位置を r(t)[m] とします。
</p>
<p style="text-align:center">
<img src="http://www.natural-science.or.jp/images/20100302-01.gif" alt="" />
</p>
<h4>ばね弾性力＋重力による運動の変数</h4>
<p>
■ 時刻 t[s]
■ ボールの位置 r(t)=(x(t),y(t),z(t))[m]<br />
■ ばねの自然長 L_0[m]<br />
■ ばねの長さ L(t)[m]<br />
■ ばねの変位 ΔL(t)[m]<br />
■ ばね弾性力 f_k = (f_{kx},f_{ky},f_{kz})[N]<br />
■ 重力 f_g = (0,0,f_f_{gz})[N]<br />
■ 角度 Φ[rad]、θ[rad]<br />
</p>
<p>
ボールに加わる力がばね弾性力だけでなく重力も加わるので、
ばね弾性力には添え字の k を、重力には、添え字に g をつけて区別することにします。
</p>

<h3>コンピュータアルゴリズム導出までのステップ</h3>
<p>
<a href="http://www.natural-science.or.jp/article/20100228225603.php">【15日目】ばね弾性力がある場合の運動方程式（２次元）</a>と同様にすすめます。<br />
</p>
<p>
１．ばねの長さ L(t) <br />
２．ばねの変位 ΔL(t)<br />
３．ばね弾性力 f_k <br />
４．ばね弾性力の x,y,z 各成分 f_{kx},f_{ky},f_{kz}<br />
５．ボールへ加わる力の x,y,z 各成分 F_x, F_y, F_z<br />
６．ニュートン運動方程式から加速度の x,y,z 各成分 a_x(t),a_y(t),a_z(t) <br />
</p>

<h3>ばね弾性力 f_k の導出</h3>
<p>
<a href="http://www.natural-science.or.jp/article/20100223005001.php">【13日目】ばね弾性力がある場合の運動方程式</a>で導出したとおり、
ばね弾性力 f[N] とばねの変位 ΔL[m] との関係は、<span style="font-weight:600">フックの法則</span>と呼ばれる次の関係式を満たします。
</p>
<div class="waku">
<div style="float:right">(17-1)</div>
<img src="http://www.natural-science.or.jp/images/20100302-15.gif" alt="フックの法則" />
</div>
<p>
ばね弾性力 f[N] を導出するために、ばねの変位 ΔL[m] を得る必要があります。時刻 t[s] のときのばねの変位 ΔL(t) は、ばねの長さ L(t) からばねの自然長 L_0[m] を引いたものになります。ばねの長さ L(t) は、次の図の関係から求めることができます。
</p>
<p style="text-align:center">
<img src="http://www.natural-science.or.jp/images/20100302-02.gif" alt="" />
</p>
<p>
L(t) は、<span style="font-weight:600">三平方の定理</span>から、
</p>
<div class="waku">
<div style="float:right">(17-2)</div>
<img src="http://www.natural-science.or.jp/images/20100302-03.gif" alt="" />
</div>

<p>
ばねの変位 ΔL(t) は次のように決まります。
</p>
<div class="waku">
<div style="float:right">(17-3)</div>
<img src="http://www.natural-science.or.jp/images/20100302-04.gif" alt="" />
</div>
<p>
上式を(17-1)に代入することで、ばね弾性力 f[N] を求めることができます。
</p>
<div class="waku">
<div style="float:right">(17-4)</div>
<img src="http://www.natural-science.or.jp/images/20100302-16.gif" alt="" />
</div>
<p>
ついでに、角度Φも求まります。
</p>
<div class="waku">
<div style="float:right">(17-5)</div>
<img src="http://www.natural-science.or.jp/images/20100302-05.gif" alt="" />
</div>
<h3>ばね弾性力の x,y,z 各成分（f_{kx},f_{ky},f_{kz}）の導出</h3>
<p>
３次元の場合では、x,y,z 成分の一括で求めることができず、２段階で行ないます。
本節でははじめに、z 成分（f_{kz}）と xy平面成分（f_{kxy}）の２つに分割後、
さらに、xy平面成分（f_{kxy}）を x 成分（f_{kx}）と y 成分（f_{ky}）とに分解することで、全成分を導出します。
</p>
<h4>z 成分（f_{kz}）と xy平面成分（f_{kxy}）への分割</h4>
<p style="text-align:center">
<img src="http://www.natural-science.or.jp/images/20100302-06.gif" alt="" />
</p>
<p>
ばね弾性力 f_k と 角度Φ が求まっているので、z 成分（f_{kz}）と xy平面成分（f_{kxy}）はそれぞれ、sinΦ, cosΦ を掛けることで得られます。
</p>
<h4>x 成分（f_{kx}）と y 成分（f_{ky}）への分割</h4>
<p>
x 成分（f_{kx}）と y 成分（f_{ky}）への分割のために必要なのは、角度θです。
</p>
<p style="text-align:center">
<img src="http://www.natural-science.or.jp/images/20100302-07.gif" alt="" />
</p>
<p>
上図から、sinθ, cosθが求まります。
</p>
<div class="waku">
<div style="float:right">(17-6)</div>
<img src="http://www.natural-science.or.jp/images/20100302-08.gif" alt="" />
</div>
<p>
xy平面成分（f_{kxy}）に、sinθ, cosθをそれぞれ掛けることで、x 成分（f_{kx}）と y 成分（f_{ky}）が得られます。
</p>
<p style="text-align:center">
<img src="http://www.natural-science.or.jp/images/20100302-09.gif" alt="" />
</p>
<p>
ここまで得られた式を代入することで、
ばね弾性力の x,y,z 各成分（f_{kx},f_{ky},f_{kz}）の導出することができました。
</p>
<div class="waku">
<div style="float:right">(17-7)</div>
<img src="http://www.natural-science.or.jp/images/20100302-10.gif" alt="" />
</div>

<h2>ばね弾性力＋重力がある場合の運動方程式</h2>
<p>
ボールに、ばね弾性力と重力が働く場合、
ボールに作用するすべての力 F[N] は、ばね弾性力の各成分（f_{kx},f_{ky},f_{kz}）と 重力（0,0,f_{gz}）となります。x,y,z 成分それぞれに作用する力は、
</p>
<div class="waku">
<div style="float:right">(17-8)</div>
<img src="http://www.natural-science.or.jp/images/20100302-11.gif" alt="力" />
</div>
<p>
となります。式(17-8)を<a href="http://www.natural-science.or.jp/article/20100110005549.php">【５日目】 重力加速度、重力、ニュートンの運動方程式</a>で導出したニュートンの運動方程式
</p>
<div class="waku">
<div style="float:right">(17-9)</div>
<img src="http://www.natural-science.or.jp/images/20100203-01.gif" alt="ニュートンの運動方程式" />
</div>
<p>
に代入することで、空気抵抗がある場合のボールの運動方程式が得られます。
</p>
<div class="waku">
<div style="float:right">(17-10)</div>
<img src="http://www.natural-science.or.jp/images/20100302-12.gif" alt="運動方程式" />
</div>
<p>
ばね弾性力が働く場合、ボールの加速度の各成分は、<span style="font-weight:600">質量 m[kg]に反比例</span>することがわかります。つまり上式は、「<span style="font-weight:600">ばね弾性力による加速度は重いほど小さく、軽いほど大きくなる</span>」ことを意味しています。これは、直感的に成り立っていることがわかります。
</p>
<h2>ばね弾性力による運動のアルゴリズムの導出</h2>
<p>
式(17-10)として得られたニュートンの運動方程式を<a href="http://www.natural-science.or.jp/article/20100223005001.php">【13日目】ばね弾性力がある場合の運動方程式</a>と同様に、コンピュータでシミュレーションするためのアルゴリズム導出します。
式(17-10)を差分で表すと、
</p>
<div class="waku">
<div style="float:right">(17-11)</div>
<img src="http://www.natural-science.or.jp/images/20100302-13.gif" alt="差分方程式" />
</div>
<p>
となります。上式は、<span style="font-weight:600">t = t_n[s] のときの加速度 a_n[m/s^2] は、そのときの速度 v_n[m/s]</span>で得られることを表しています。得られた加速度と<a href="http://www.natural-science.or.jp/article/20091225234208.php">等加速度直線運動のアルゴリズム</a>を用いることで、速度 v[m/s] と位置 x[m]とを決定することができます。
</p>
<div class="waku">
<div style="float:right">(17-12)</div>
<img src="http://www.natural-science.or.jp/images/20100206-01.gif" alt="速度" />
</div><br />
<div class="waku">
<div style="float:right">(17-13)</div>
<img src="http://www.natural-science.or.jp/images/20100206-02.gif" alt="位置" />
</div>
<p>
本節では、ばねの変位を x軸方向に限定しているので、初期位置 x_0, 初速度 v_{x0} を指定することで、様々な運動のシミュレーションを行うことができます。
次節では、具体的なシミュレーションを行ないます。
</p>
<!--
<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="20100302-01.gif" src="http://www.natural-science.or.jp/images/20100302-01.gif" width="574" height="374" class="mt-image-none" style="" /></span>
-->
<mt:include module="仮想物理実験室　コンテンツ" />
<mt:include module="OpenGL入門　コンテンツ" />
]]>
        
    </content>
</entry>

<entry>
    <title>【2010.03.04】モータードライバを作り直そう！！</title>
    <link rel="alternate" type="text/html" href="http://www.natural-science.or.jp/article/20100304214543.php" />
    <id>tag:www.natural-science.or.jp,2010://12.9452</id>

    <published>2010-03-04T12:45:43Z</published>
    <updated>2010-03-04T12:46:18Z</updated>

    <summary> マイコンカーを製作中のM川さん(ものづくり講座10ヶ月,小学校4年生)。 今日...</summary>
    <author>
        <name>八重樫 和之</name>
        
    </author>
    
        <category term="応用編" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.natural-science.or.jp/">
        <![CDATA[
<p>マイコンカーを製作中のM川さん(ものづくり講座10ヶ月,小学校4年生)。
今日は前回までに完成させたモータードライバ回路の起動チェックを行いました。
しかし、モーターは回りません。
回路を見ると、図のように半田の量が多く、配線が汚くなってしまっています
これを直すと、基板を焦がしまた別のショートが発生するなどの問題が予想されます。
そこで、今回は半田の量に注意して新たに回路を作りなおしました。
M川さんは今まで1ヶ月以上掛かっていたモータードライバ回路を、今回２時間で作りました。
片側のモーターまでは回るようになったので、もう少しで回路完成です。
</p>
<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="yattemiyou_100304.gif" src="http://www.natural-science.or.jp/images/yattemiyou_100304.gif" width="411" height="337" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></span></p>]]>
        
    </content>
</entry>

<entry>
    <title>VisualC++ と OpenGL を利用した仮想物理実験室【16日目】ばね弾性力による運動：単振動運動（２次元）</title>
    <link rel="alternate" type="text/html" href="http://www.natural-science.or.jp/article/20100301024214.php" />
    <id>tag:www.natural-science.or.jp,2010://12.9445</id>

    <published>2010-02-28T17:42:14Z</published>
    <updated>2010-03-06T06:57:42Z</updated>

    <summary> 【15日目】ばね弾性力がある場合の運動方程式（２次元）では、 ばねの変位が x...</summary>
    <author>
        <name>遠藤 理平</name>
        <uri>http://www.natural-science.or.jp/article/members/cat-12/</uri>
    </author>
    
        <category term="コンピュータ・シミュレーション講座 授業日誌" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="仮想物理実験室" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="opengl" label="OpenGL" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="visualc" label="VisualC++" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ばね弾性力" label="ばね弾性力" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="単振動" label="単振動" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.natural-science.or.jp/">
        <![CDATA[<p>
<a href="http://www.natural-science.or.jp/article/20100228225603.php">【15日目】ばね弾性力がある場合の運動方程式（２次元）</a>では、
ばねの変位が x-y 平面内の場合における、<span style="font-weight:600">ばね弾性力</span>の運動方程式の導出と、コンピュータでシミュレーションを行うためのアルゴリズムの導出を行ないました。
t=t_n[s]のときの加速度 a_n[m/s^2]は、
</p>
<div class="waku">
<div style="float:right">(16-1)</div>
<img src="http://www.natural-science.or.jp/images/20100228-12.gif" alt="差分方程式" />
</div>
<p>
と、そのときのボールの位置 x_n[m/s]によって決まる値となります。
|r_n| とは、原点からボールまでの距離、
</p>
<div class="waku">
<div style="float:right">(16-1)</div>
<img src="http://www.natural-science.or.jp/images/20100228-03.gif" alt="差分方程式" />
</div>
<p>
です。コンピュータシミュレーションでは、
初期条件として、r_0 = 20.0[m]とし、１０個のボールの質量 m [kg]を変化させて運動の違いを確認します。
</p>
<h2>ばね弾性力による運動のための計算アルゴリズム</h2>
<h4>支柱の位置とボールの位置・速度・加速度の初期値</h4>
<p>
ばね定数を k、自然長 L[m] のばねの片側を固定した動かない支柱を原点に置き、ばねの反対側をボールつけ、x-y 平面上に伸ばします。時刻 t=t_n[s] のときのボールの位置を r_n とします。
</p>
<pre>
k = 10.0;    //ばね定数
L = 30.0;    //ばねの自然長
r = 20.0;    //ボールの初期半径

ball_r = 4.0;//ボールの半径

//支柱の定義
double poll_x = 0.0;
double poll_y = 0.0;
double poll_z = 0.0;
double poll_r = 5.0;  //半径
double poll_h = 20.0; //高さ
</pre>

<h4>速度・位置を逐次計算するアルゴリズム</h4>
<pre>
//位置の計算
x  = x  + vx * dt;
y  = y  + vy * dt;
z  = z  + vz * dt;

r = sqrt(pow(x,2)+pow(y,2));   //&lt;--原点からボールの距離（＝ばねの長さ）

//加速度の計算
ax = - k/m * (r - L) * x/r;    //&lt;-----ばね弾性力からの寄与
ay = - k/m * (r - L) * y/r;    //&lt;-----ばね弾性力からの寄与
az = 0.0;
//速度の計算
vx = vx + ax * dt;
vy = vy + ay * dt;
vz = vz + az * dt;
</pre>
<p>
このアルゴリズムでは誤差が大きく、時間と共に、単振動の振幅が大きくなってしまいます。
アルゴリズムの改善は、次に行ないます。
</p>


<h2>ばね弾性力による単振動のシミュレーション</h2>
<p>
つるつるの床に、動かない支柱とばねで繋がったボールが運動するシミュレーションです。運動は、ばね弾性力のみによる単振動運動となります。
</p>
<div style="text-align:center">
<object 
    id="重力＋空気抵抗力による自由落下運動のシミュレーション" 
    width="512" height="512" 
    classid="CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95" 
    codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715" 
    standby="Loading MicrosoftR WindowsR Media Player components..." 
    type="application/x-oleobject">
    <param name="FileName" value="http://www.natural-science.or.jp/images/20100301a.m1v" />
    <!-- 自動再生の有無 --> 
    <param name="AutoStart" value="true" />
    <!-- コントローラー表示の有無 -->
    <param name="ShowControls" value="true" />
    <embed 
        name="プレーヤー名" 
        type="application/x-mplayer2" 
        pluginspage="http://www.microsoft.com/Windows/MediaPlayer/" 
        src="http://www.natural-science.or.jp/images/20100301a.m1v"
        width="512" height="512" 
        autostart="1" 
        showcontrols="0">
    </embed>
</object>
</div>

<h2>VisualC++ ＋ OpenGL プログラミング</h2>
<p>
「<a href="http://www.natural-science.or.jp/article/20091209225032.php">【０日目】仮想物理実験室の構築 （ver1.0）</a>」をベースにプログラミングします。上記で解説した逐次計算を行うアルゴリズムをプログラミングします。
</p>
<h3>ばねの定義</h3>
<p>
ばねの定義については、<a href="http://www.natural-science.or.jp/article/20100223233220.php">【14日目】ばね弾性力による運動：単振動運動</a>をご覧下さい。
</p>
<h3>仮想物理実験室変数の定義</h3>
<pre>
//////////////////////////////////////////////////////////////////////////
// 変数の定義
//////////////////////////////////////////////////////////////////////////
#define _BITMAP 1 //アニメーション作成用ビットマップの保存 0:しない　1:する
ofstream ofs1( &quot;ball1.data&quot; );
//--------------------------------------------------------
// 仮想物理実験室変数の定義
//--------------------------------------------------------
double t = 0.0;     //時刻
double dt= 0.01;    //時間刻み
int tn = 0;         //ステップ数
double k = 10.0;    //ばね定数
double L = 30.0;    //ばねの自然長
double r = 20.0;    //ボールの初期半径
double radian; 
double theta;

//支柱の定義
double poll_x = 0.0;
double poll_y = 0.0;
double poll_z = 0.0;
double poll_r = 5.0;  //半径
double poll_h = 20.0; //高さ

// ボールの定義
double ball_r = 4.0;//ボールの半径
struct BALL {
  double m;
  double x, y, z;
  double vx, vy, vz;
  double ax, ay, az;
};
const int N = 10;
BALL ball[N];
void SetUp(void){
  for(int i=0; i&lt;N; i++ ){
    radian = 2.0 * PI * double(i)/double(N);
    ball[i].m  = 2.0*double(i+1)/double(N); //ボールの質量
    ball[i].x  = r * cos(radian);
    ball[i].y  = r * sin(radian);
    ball[i].z  = ball_r; //ボールがめり込まないように
    ball[i].vx = 0.0;
    ball[i].vy = 0.0;
    ball[i].vz = 0.0;
    ball[i].ax = 0.0;
    ball[i].ay = 0.0;
    ball[i].az = 0.0;
  }
}
</pre>
<p>
ボールの位置「x,y,z」、速度「vx,vy,vz」、加速度「ax,ay,az」を
構造体「BALL」のメンバとします。「BALL」型の変数「ball1」を宣言と同時に初期値を設定しています。
</p>
<h3>速度・位置を逐次計算するアルゴリズム</h3>
<pre>
//--------------------------------------------------------
// 計算と物体の描画
//--------------------------------------------------------
void Calculate(){
  t = dt * double(tn);
  //ofs1 &lt;&lt; dt*tn &lt;&lt; &quot; &quot; &lt;&lt; ball1.x &lt;&lt; &quot; &quot; &lt;&lt; ball1.vx &lt;&lt; &quot; &quot; &lt;&lt; ball1.ax &lt;&lt;endl;
  for(int i=0; i&lt;N; i++){
    //位置の算出
    ball[i].x = ball[i].x + ball[i].vx * dt;
    ball[i].y = ball[i].y + ball[i].vy * dt;
    ball[i].z = ball[i].z + ball[i].vz * dt;
    r = sqrt(pow(ball[i].x,2)+pow(ball[i].y,2));

    //加速度の算出
    ball[i].ax = - k/ball[i].m * (r - L) * ball[i].x/r;
    ball[i].ay = - k/ball[i].m * (r - L) * ball[i].y/r;
    ball[i].az = 0.0;
    //速度の算出
    ball[i].vx = ball[i].vx + ball[i].ax * dt;
    ball[i].vy = ball[i].vy + ball[i].ay * dt;
    ball[i].vz = ball[i].vz + ball[i].az * dt;
  }
 tn++;
}
void DrawStructure(){
  for(int i=0; i&lt;N; i++){
    glPushMatrix();
      glMaterialfv(GL_FRONT, GL_AMBIENT, ms_silver.ambient);
      glMaterialfv(GL_FRONT, GL_DIFFUSE, ms_silver.diffuse);
      glMaterialfv(GL_FRONT, GL_SPECULAR, ms_silver.specular);
      glMaterialfv(GL_FRONT, GL_SHININESS, &amp;ms_silver.shininess);
      glTranslated(ball[i].x, ball[i].y, ball[i].z); //平行移動値の設定
      glutSolidSphere(ball_r, 20, 20);            //引数：(半径, Z軸まわりの分割数, Z軸に沿った分割数)
    glPopMatrix();
    //バネ
    r = sqrt(pow(ball[i].x,2)+pow(ball[i].y,2));
    if(asin(ball[i].y/r)&gt;=0 ){
      radian = acos(ball[i].x/r);
    }else{
      radian = -acos(ball[i].x/r);
    }
    theta = radian/(2.0*PI) * 360.0;
    glPushMatrix();
      glMaterialfv(GL_FRONT, GL_AMBIENT, ms_yellow_rubber.ambient);
      glMaterialfv(GL_FRONT, GL_DIFFUSE, ms_yellow_rubber.diffuse);
      glMaterialfv(GL_FRONT, GL_SPECULAR, ms_yellow_rubber.specular);
      glMaterialfv(GL_FRONT, GL_SHININESS, &amp;ms_yellow_rubber.shininess);  
      glTranslated(poll_r*cos(radian), poll_r*sin(radian), ball_r);
      glRotated( theta , 0.0,0.0,1.0);
      glRotated(90.0, 0.0,1.0,0.0);
      skSolidSpring(10, 10, 5, 1.0, 0.8, r-(ball_r+poll_r));
    glPopMatrix();
  }
  //軸（円錐）
  glPushMatrix();
      glMaterialfv(GL_FRONT, GL_AMBIENT, ms_copper.ambient);
      glMaterialfv(GL_FRONT, GL_DIFFUSE, ms_copper.diffuse);
      glMaterialfv(GL_FRONT, GL_SPECULAR, ms_copper.specular);
      glMaterialfv(GL_FRONT, GL_SHININESS, &amp;ms_copper.shininess);
      glutSolidCone(5.0,20.0,20,20);//引数：(半径, 高さ, Z軸まわりの分割数, Z軸に沿った分割数)
  glPopMatrix();

}
</pre>
<p>
位置「ball1.x」「ball1.y」「ball1.z」<br />
速度「ball1.vx」「ball1.vy」「ball1.vz」<br />
加速度「ball1.ax」「ball1.ay」「ball1.az」<br />
を逐次計算します。
先にも述べましたが、このアルゴリズムでは誤差が大きく、
時間と共に単振動の振幅が大きくなってしまいます。
アルゴリズムの改善は、次回行ないます。
</p>

<!--
<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="20100301-1.gif" src="http://www.natural-science.or.jp/images/20100301-1.gif" width="512" height="512" class="mt-image-none" style="" /></span>
-->
<mt:include module="仮想物理実験室　コンテンツ" />
<mt:include module="OpenGL入門　コンテンツ" />
]]>
        
    </content>
</entry>

<entry>
    <title>VisualC++ と OpenGL を利用した仮想物理実験室【15日目】ばね弾性力がある場合の運動方程式（２次元）</title>
    <link rel="alternate" type="text/html" href="http://www.natural-science.or.jp/article/20100228225603.php" />
    <id>tag:www.natural-science.or.jp,2010://12.9444</id>

    <published>2010-02-28T13:56:03Z</published>
    <updated>2010-02-28T17:25:55Z</updated>

    <summary> 【13日目】ばね弾性力がある場合の運動方程式では、ばね弾性力がある場合の運動方...</summary>
    <author>
        <name>遠藤 理平</name>
        <uri>http://www.natural-science.or.jp/article/members/cat-12/</uri>
    </author>
    
        <category term="コンピュータ・シミュレーション講座 授業日誌" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="仮想物理実験室" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="ばね弾性力" label="ばね弾性力" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="フックの法則" label="フックの法則" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="単振動" label="単振動" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.natural-science.or.jp/">
        <![CDATA[<p>
<a href="http://www.natural-science.or.jp/article/20100223005001.php">【13日目】ばね弾性力がある場合の運動方程式</a>では、<span style="font-weight:600">ばね弾性力</span>がある場合の運動方程式の導出と、コンピュータでシミュレーションを行うためのアルゴリズムの導出を行ないました。さらに、<a href="http://www.natural-science.or.jp/article/20100223233220.php">【14日目】ばね弾性力による運動：単振動運動</a>では、ばねが x 軸方向のみに変位するばねの単振動のシミュレーションを行ないました。
</p>
<p>
本節では、x-y 平面上でばねが変位する場合をシミュレーションするためのアルゴリズムの導出をおこないます。
自然長 L[m] のばねの片側を固定した動かない支柱を原点に置き、ばねの反対側をボールつけ、x-y 平面上に伸ばします。時刻 t=t_n[s] のときのボールの位置を r_n とします。
</p>
<p style="text-align:center">
<img src="http://www.natural-science.or.jp/images/20100228-01.gif" alt="" />
</p>
<h4>パラメータ</h4>
<p>
■ ボールの位置 r_n=(x_n,y_n)[m]<br />
■ ばねの長さ L[m]<br />
■ ばねの変位 ΔL[m]<br />
■ ばね弾性力 f=(f_x,f_y)[N]<br />
■ 変位の方向と x 軸方向とのなす角度 θ[rad]<br />
パラメータの関係性のみを図示します。
</p>
<h2>ばね弾性力 f[N] の導出</h2>
<p>
<a href="http://www.natural-science.or.jp/article/20100223005001.php">【13日目】ばね弾性力がある場合の運動方程式</a>で導出したとおり、
ばね弾性力 f[N] とばねの変位 ΔL[m] との関係は、<span style="font-weight:600">フックの法則</span>と呼ばれる次の関係式を満たします。
</p>
<div class="waku">
<div style="float:right">(15-1)</div>
<img src="http://www.natural-science.or.jp/images/20100228-06.gif" alt="フックの法則" />
</div>
<p>
ばね弾性力 f[N] が、<span style="font-weight:600">ニュートンの運動方程式</span>から、シミュレーションのアルゴリズムを導出できます。ばね弾性力 f[N] を導出するために、ばねの変位 ΔL[m] を得る必要があります。関係性をわかりやすくするために、パラメータの関係を模式的に図示します。
</p>
<p style="text-align:center">
<img src="http://www.natural-science.or.jp/images/20100228-02.gif" alt="" />
</p>
<p>
原点からボールまでの距離 |r_n| は、<span style="font-weight:600">三平方の定理</span>から、
</p>
<div class="waku">
<div style="float:right">(15-2)</div>
<img src="http://www.natural-science.or.jp/images/20100228-03.gif" alt="" />
</div>
<p>
のように得られます。これにより、ばねの変位 ΔL[m] を導出します。
</p>
<div class="waku">
<div style="float:right">(15-3)</div>
<img src="http://www.natural-science.or.jp/images/20100228-04.gif" alt="" />
</div>
<p>
ばねの変位 ΔL[m] が導出できたので、これを 式(15-1)に代入することで、ばね弾性力 f[N] を求めることができます。しかしながら、ニュートンの運動方程式に当てはめるためには、ばね弾性力の x 成分 f_x と y 成分 f_y を得る必要があります。各成分を導出するために必要な情報は、ばねの変位の方向と x 軸方向とのなす角を θ[rad] です。cosθとsinθは、ボールの座標 r_n = (x_n, y_n) とを用いて次のように表すことができます。
</p>
<div class="waku">
<div style="float:right">(15-4)</div>
<img src="http://www.natural-science.or.jp/images/20100228-05.gif" alt="" />
</div>
<p>
式(15-4)を用いることで、ばね弾性力の各成分 f=(f_x, f_y) を導出することができます。 
</p>
<p style="text-align:center">
<img src="http://www.natural-science.or.jp/images/20100228-07.gif" alt="" />
</p>

<div class="waku">
<div style="float:right">(15-5)</div>
<img src="http://www.natural-science.or.jp/images/20100228-08.gif" alt="" />
</div>
<p>
式(15-5)に ばね弾性力 f[N]、ばねの変位 ΔL[m]、cosθ、sinθを代入します。
</p>
<div class="waku">
<div style="float:right">(15-6)</div>
<img src="http://www.natural-science.or.jp/images/20100228-09.gif" alt="" />
</div>
<p>
上式は、ボールの位置 r_n = (x_n, y_n) が得られれば、ばね弾性力の各成分 f=(f_x, f_y) が決まることを表しています。上式は、任意の時刻 t[s] の位置 r(t) =(x(t), y(t)) でも成り立ちます。
</p>

<h2>ばね弾性力がある場合の運動方程式</h2>
<p>
ばね弾性力以外にボールに力が働かないとすると、
ボールに作用するすべての力 F[N] は、ばね弾性力 f_x[N] と f_y[N]のみとなります。
x,y,z 成分それぞれに作用する力は、
</p>
<div class="waku">
<div style="float:right">(15-7)</div>
<img src="http://www.natural-science.or.jp/images/20100228-10.gif" alt="力" />
</div>
<p>
となります。式(10-6)を<a href="http://www.natural-science.or.jp/article/20100110005549.php">【５日目】 重力加速度、重力、ニュートンの運動方程式</a>で導出したニュートンの運動方程式
</p>
<div class="waku">
<div style="float:right">(15-8)</div>
<img src="http://www.natural-science.or.jp/images/20100203-01.gif" alt="ニュートンの運動方程式" />
</div>
<p>
に代入することで、空気抵抗がある場合のボールの運動方程式が得られます。
</p>
<div class="waku">
<div style="float:right">(15-9)</div>
<img src="http://www.natural-science.or.jp/images/20100228-11.gif" alt="ニュートンの運動方程式" />
</div>
<p>
ばね弾性力を考慮すると、x 軸方向のボールの加速度 a_x[m/s^2]は、<span style="font-weight:600">質量 m[kg]に反比例</span>することがわかります。つまり上式は、「<span style="font-weight:600">ばね弾性力による加速度は重いほど小さく、軽いほど大きくなる</span>」ことを意味しています。これは、直感的に成り立っていることがわかります。
</p>
<h2>ばね弾性力による運動のアルゴリズムの導出</h2>
<p>
式(15-9)として得られたニュートンの運動方程式を<a href="http://www.natural-science.or.jp/article/20100223005001.php">【13日目】ばね弾性力がある場合の運動方程式</a>と同様に、コンピュータでシミュレーションするためのアルゴリズム導出します。
式(15-9)を差分で表すと、
</p>
<div class="waku">
<div style="float:right">(15-10)</div>
<img src="http://www.natural-science.or.jp/images/20100228-12.gif" alt="差分方程式" />
</div>
<p>
となります。上式は、<span style="font-weight:600">t = t_n[s] のときの加速度 a_n[m/s^2] は、そのときの速度 v_n[m/s]</span>で得られることを表しています。得られた加速度と<a href="http://www.natural-science.or.jp/article/20091225234208.php">等加速度直線運動のアルゴリズム</a>を用いることで、速度 v[m/s] と位置 x[m]とを決定することができます。
</p>
<div class="waku">
<div style="float:right">(15-11)</div>
<img src="http://www.natural-science.or.jp/images/20100206-01.gif" alt="速度" />
</div><br />
<div class="waku">
<div style="float:right">(15-12)</div>
<img src="http://www.natural-science.or.jp/images/20100206-02.gif" alt="位置" />
</div>
<p>
本節では、ばねの変位を x軸方向に限定しているので、初期位置 x_0, 初速度 v_{x0} を指定することで、様々な運動のシミュレーションを行うことができます。
次節では、具体的なシミュレーションを行ないます。
</p>
<!--
<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="20100228-01.gif" src="http://www.natural-science.or.jp/images/20100228-01.gif" width="426" height="409" class="mt-image-none" style="" /></span>
-->
<mt:include module="仮想物理実験室　コンテンツ" />
<mt:include module="OpenGL入門　コンテンツ" />
]]>
        
    </content>
</entry>

<entry>
    <title>VisualC++ と OpenGL を利用した仮想物理実験室【4.2日目】等加加速度直線運動の解析解：微分・積分を利用した解析解の導出</title>
    <link rel="alternate" type="text/html" href="http://www.natural-science.or.jp/article/20100227213120.php" />
    <id>tag:www.natural-science.or.jp,2010://12.9443</id>

    <published>2010-02-27T12:31:20Z</published>
    <updated>2010-02-27T12:33:21Z</updated>

    <summary> 【3.5日目】等加速度直線運動の解析解４：微分・積分を利用した解析解の導出では...</summary>
    <author>
        <name>遠藤 理平</name>
        <uri>http://www.natural-science.or.jp/article/members/cat-12/</uri>
    </author>
    
        <category term="コンピュータ・シミュレーション講座 授業日誌" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="仮想物理実験室" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="位置" label="位置" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="加加速度" label="加加速度" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="加速度" label="加速度" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="等加加速度直線運動" label="等加加速度直線運動" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="解析解" label="解析解" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="速度" label="速度" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.natural-science.or.jp/">
        <![CDATA[<p>
<a href="http://www.natural-science.or.jp/article/20100221194944.php">【3.5日目】等加速度直線運動の解析解４：微分・積分を利用した解析解の導出</a>では、微分・積分を利用して等加速度直線運動の<span style="font-weight:600">解析解</span>を導出しました。
本節では、<a href="http://www.natural-science.or.jp/article/20100101191243.php">【４日目】等加加速度直線運動</a>でシミュレーションを行った
等加加速度直線運動の解析解を導出します。
</p>
<h2>加速度と加加速度との関係</h2>
<p>
加速度 a[m/s^2]と加加速度 j[m/s^3]の関係は、
時刻 t_n のときの加速度 a_n は、
時刻 t_{n-1} のときの加速度 a_{n-1}、加加速度 j_{n-1}をもちいて、次のように表されます。
</p>
<div class="waku">
<div style="float: right;">(4.2-1)</div>
<img src="http://www.natural-science.or.jp/images/20100227-01.gif" alt="" />
</div>
<p>
<a href="http://www.natural-science.or.jp/article/20100101191243.php">【４日目】等加加速度直線運動</a>は、その名の通り等加加速度なので、加加速度 j[m/s^3] は一定としてシミュレーションしていますが、一般的に加速度と加加速度の関係は、<a href="http://www.natural-science.or.jp/article/20100217215221.php">【3.3日目】等加速度直線運動の解析解２：差分と微分</a>で導出した加速度と速度の関係と同様で、加速度 a[m/s^2] の時間 t[s] による微分が加加速度 j[m/s^3]となります。
式(4.2-1)を変形します。
</p>
<div class="waku">
<div style="float: right;">(4.2-2)</div>
<img src="http://www.natural-science.or.jp/images/20100227-02.gif" alt="" />
</div>
<p>
両辺を Δt→0 の極限をとることで、加速度の微分を定義します。
</p>
<div class="waku">
<div style="float: right;">(4.2-3)</div>
<img src="http://www.natural-science.or.jp/images/20100227-03.gif" alt="" />
</div>
<h4>加速度と加加速度との関係</h4>
<div class="waku">
<div style="float: right;">(4.2-4)</div>
<img src="http://www.natural-science.or.jp/images/20100227-04.gif" alt="" />
</div>
<p>
上式は、加速度 a[m/s^2] を微分すると加加速度 j[m/s^3]となることを表しています。
</p>
<h2>等加加速度直線運動の解析解の導出</h2>
<p>
<a href="http://www.natural-science.or.jp/article/20100221194944.php">【3.5日目】等加速度直線運動の解析解４：微分・積分を利用した解析解の導出</a>にて、等加速度直線運動の解析解を導出したのと同様に、等加加速度直線運動の解析解を導出します。
等加加速度とは、加加速度 j[m/s^3] が時間に依らず一定なので、次のように書くことができます。
</p>
<div class="waku">
<div style="float: right;">(4.2-5)</div>
<img src="http://www.natural-science.or.jp/images/20100227-17.gif" alt="" />
</div>
<p>
式(4.2-4)を時刻 t で積分することで、加速度を得ることができます。
</p>
<div class="waku">
<div style="float: right;">(4.2-6)</div>
<img src="http://www.natural-science.or.jp/images/20100227-05.gif" alt="" />
</div>
<p>
最後の「C」は積分定数です。時刻 t=0[s] のときの加速度 a(0) を a_0 とすることで、積分定数 C を決めることができます。
</p>
<div class="waku">
<div style="float: right;">(4.2-7)</div>
<img src="http://www.natural-science.or.jp/images/20100227-06.gif" alt="" />
</div>
<p>
式(4.2-7)を式(4.2-6) に代入することで、等加加速度直線運動の加速度の解析解が得られます。
</p>
<h4>等加加速度直線運動の加速度の解析解</h4>
<div class="waku">
<div style="float: right;">(4.2-8)</div>
<img src="http://www.natural-science.or.jp/images/20100227-07.gif" alt="" />
</div>
<p>
加速度の解析解 a(t) が導出できたので、<a href="http://www.natural-science.or.jp/article/20100221194944.php">【3.5日目】等加速度直線運動の解析解４：微分・積分を利用した解析解の導出</a>と同様に、時刻 t での積分を繰り返すことで、速度 v(t)、位置 x(t) を導出します。
</p>
<h4>速度と加速度との関係</h4>
<div class="waku">
<div style="float: right;">(4.2-9)</div>
<img src="http://www.natural-science.or.jp/images/20100227-08.gif" alt="" />
</div>
<p>
式(4.2-9)を時刻 t で積分することで、速度を得ることができます。
</p>
<div class="waku">
<div style="float: right;">(4.2-10)</div>
<img src="http://www.natural-science.or.jp/images/20100227-09.gif" alt="" />
</div>
<p>
最後の「C」は積分定数です。時刻 t=0[s] のときの速度 v(0) を v_0 とすることで、積分定数 C を決めることができます。
</p>
<div class="waku">
<div style="float: right;">(4.2-11)</div>
<img src="http://www.natural-science.or.jp/images/20100227-10.gif" alt="" />
</div>
<p>
式(4.2-10)を式(4.2-11) に代入することで、等加加速度直線運動の速度の解析解が得られます。
</p>
<h4>等加加速度直線運動の速度の解析解</h4>
<div class="waku">
<div style="float: right;">(4.2-12)</div>
<img src="http://www.natural-science.or.jp/images/20100227-11.gif" alt="" />
</div>
<p>
続けて、位置 x(t) を導出します。
</p>
<h4>位置と速度との関係</h4>
<div class="waku">
<div style="float: right;">(4.2-13)</div>
<img src="http://www.natural-science.or.jp/images/20100227-12.gif" alt="" />
</div>
<p>
式(4.2-13)を時刻 t で積分することで、位置を得ることができます。
</p>
<div class="waku">
<div style="float: right;">(4.2-14)</div>
<img src="http://www.natural-science.or.jp/images/20100227-13.gif" alt="" />
</div>
<p>
最後の「C」は積分定数です。時刻 t=0[s] のときの位置 x(0) を x_0 とすることで、積分定数 C を決めることができます。
</p>
<div class="waku">
<div style="float: right;">(4.2-15)</div>
<img src="http://www.natural-science.or.jp/images/20100227-14.gif" alt="" />
</div>
<p>
式(4.2-14)を式(4.2-15) に代入することで、等加加速度直線運動の速度の解析解が得られます。
</p>
<h4>等加加速度直線運動の位置の解析解</h4>
<div class="waku">
<div style="float: right;">(4.2-16)</div>
<img src="http://www.natural-science.or.jp/images/20100227-15.gif" alt="" />
</div>


<h2>微分と積分の関係</h2>
<p>
ここまで、加加速度 j(t) が与えられた場合の、加速度 a(t) と、 速度 v(t) と 位置 x(t) の解析解を時刻 t で積分することで導出しました。
微分と積分の関係性をまとめます。
</p>

<div class="waku">
<div style="float: right;">(4.2-17)</div>
<img src="http://www.natural-science.or.jp/images/20100227-16.gif" alt="" />
</div>
<!--
<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="20100227-16.gif" src="http://www.natural-science.or.jp/images/20100227-16.gif" width="581" height="362" class="mt-image-none" style="" /></span>
-->
<br />


<mt:include module="仮想物理実験室　コンテンツ" />
<mt:include module="OpenGL入門　コンテンツ" />]]>
        
    </content>
</entry>

<entry>
    <title>LabVIEWで3D的表現</title>
    <link rel="alternate" type="text/html" href="http://www.natural-science.or.jp/article/20100227182244.php" />
    <id>tag:www.natural-science.or.jp,2010://12.9441</id>

    <published>2010-02-27T09:22:44Z</published>
    <updated>2010-02-27T10:12:09Z</updated>

    <summary>ちまたでは2010年は３D元年と騒がれております。わたしたちもLabVIEWの3...</summary>
    <author>
        <name>大野 誠吾</name>
        
    </author>
    
        <category term="LabVIEW TIPS集" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="大野 誠吾" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="3d" label="3D" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="labview" label="LabVIEW" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.natural-science.or.jp/">
        <![CDATA[<p>ちまたでは<a href="http://plusd.itmedia.co.jp/lifestyle/articles/1001/08/news018.html" target="_blank">2010年は３D元年</a>と騒がれております。わたしたちもLabVIEWの3Dピクチャでお手軽に３D的表現が可能です。ここではためしに3Dピクチャをいじってみましょう。</p>

<p>関数パレットのグラフィック＆サウンド以下の<br />
３Dピクチャ制御器->ジオメトリ->球を作成.vi<br />
３Dピクチャ制御器->ジオメトリ->円錐を作成.vi<br />
を使って球と円錐を組み合わせた形にしてみました。<br />
色はそれぞれ赤と白を指定。アルファチャンネルも指定してみましたが反映されませんでした（？）これの位置をwhileループの中で変化させております。私の使っている環境では理由は良くわかりませんが2次元のピクチャ表示よりは滑らかに動いているように感じられました。</p>

<p><img src="http://www.natural-science.or.jp/assets_c/2010/02/ohno_3Dfrontpanel-thumb-400x338-5852.png" /></p>

<p>これで表現の幅が広がりますね。みなさんも３Dのピクチャで遊んでみてはいかがでしょうか。<br />
<a href="http://www.natural-science.or.jp/images/3Dtest.vi">3Dtest.vi</a></p>

<p><!--<br />
<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="ohno_3Dfrontpanel.PNG" src="http://www.natural-science.or.jp/images/ohno_3Dfrontpanel.PNG" width="644" height="545" class="mt-image-none" style="" /></span>--></p>]]>
        
    </content>
</entry>

<entry>
    <title>【2010.02.26】モータードライバ回路修復完了!!</title>
    <link rel="alternate" type="text/html" href="http://www.natural-science.or.jp/article/20100226230411.php" />
    <id>tag:www.natural-science.or.jp,2010://12.9440</id>

    <published>2010-02-26T14:04:11Z</published>
    <updated>2010-02-26T14:04:37Z</updated>

    <summary> マイコンカーのモータードライバを製作中のI川君(小学校5年生,ものづくり講座7...</summary>
    <author>
        <name>八重樫 和之</name>
        
    </author>
    
        <category term="応用編" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.natural-science.or.jp/">
        <![CDATA[
<p>マイコンカーのモータードライバを製作中のI川君(小学校5年生,ものづくり講座7ヶ月)。
関税版のマイコンカーと、I川君のモータードライバをつなぎ、モーターを動かします。
しかし、なぜが両輪が逆方向には回りますが、同じ方向には回りません。
両輪が回転している時点で、配線が切れていることはないのがわかります。
そこで、I川君の回路を見ると、図のようなミスがありました。
モーターは両端子はつながっており、図の黒線のように配線をしてしまうと、モータードライバ回路内部がショートしてしまい、プログラム通りに命令が実行されません。
そこで、図の赤線のように修正することでモータードライバ回路は完成しました。
次回はマザーボードの回路を製作しましょう!!</p><p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="yattemiyou_100226.gif" src="http://www.natural-science.or.jp/images/yattemiyou_100226.gif" width="582" height="285" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></span></p>]]>
        
    </content>
</entry>

<entry>
    <title>【2010.2.26】プログラム作成の基礎</title>
    <link rel="alternate" type="text/html" href="http://www.natural-science.or.jp/article/20100226210554.php" />
    <id>tag:www.natural-science.or.jp,2010://12.9439</id>

    <published>2010-02-26T12:05:54Z</published>
    <updated>2010-02-26T12:08:21Z</updated>

    <summary> S木くん(中学1年生,ものづくり講座3か月)はC言語を 学んでいます。 基礎編...</summary>
    <author>
        <name>佐瀬 一弥</name>
        
    </author>
    
        <category term="基礎編" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="c言語" label="C言語" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.natural-science.or.jp/">
        <![CDATA[<p>
S木くん(中学1年生,ものづくり講座3か月)はC言語を
学んでいます。<br />
基礎編のパソコンは今日で3回目になります。
ここでは、プログラムを書いたり、
保存をしたり、自分のデータを自分のUSBメモリに持ち歩いたりといったパソコンの基本的な
使い方を身につけてもらいます。<br />
そして、次の目標としてC言語のプログラムの作成から、コンパイル、実行までの
一連のソフトウェア開発の流れを自分でできるようになってほしいと思います。<br />
毎回扱っている内容はC言語によるクイズプログラムの作成やRPGゲームの作成などです。
テキストではC言語の構造や書き方の約束事などを中心に扱っていますが、
課題に取り組んで、まずはパソコンの使い方から身につけていってほしいと思います。

</p>
<p style="text-align:center">	
	<img 
	src="http://www.natural-science.or.jp/images/sase-100226.jpg" 
	alt="" /><br />
PCの使い方の基本から学びます
</p>
<!--
<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="sase-100226.jpg" src="http://www.natural-science.or.jp/images/sase-100226.jpg" width="407" height="305" class="mt-image-none" style="" /></span>
-->]]>
        
    </content>
</entry>

<entry>
    <title>【2010.02.25】モータードライバ回路のトラブルシューティングをしよう!!</title>
    <link rel="alternate" type="text/html" href="http://www.natural-science.or.jp/article/20100225234433.php" />
    <id>tag:www.natural-science.or.jp,2010://12.9438</id>

    <published>2010-02-25T14:44:33Z</published>
    <updated>2010-02-25T14:45:08Z</updated>

    <summary> マイコンカーを製作中のS木君(小学校3年生,ものづくり講座1年)。 今回はモー...</summary>
    <author>
        <name>八重樫 和之</name>
        
    </author>
    
        <category term="応用編" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.natural-science.or.jp/">
        <![CDATA[
<p>マイコンカーを製作中のS木君(小学校3年生,ものづくり講座1年)。
今回はモータードライバ回路をモーターにつなぎ、マイコンに命令を書き込みモーターを動かします。
しかし、２つのモーターのどちらも回りません。完成版のマイコンカーを利用し、原因を調べて良くとモータードライバ回路にミスがあるようです。
原因の一つとして、コネクタ部分の配線ミスによるショートがありました。
この問題を解決することで片方のモーターは回りました。
次の問題はモータードライバとマイコンの配線パターンのミスが考えられます。
次回は、モータードライバ回路の配線を直し二つのモーターを制御しましょう!!</p>
<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="yattemiyou_100225.gif" src="http://www.natural-science.or.jp/images/yattemiyou_100225.gif" width="256" height="236" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></span></p>]]>
        
    </content>
</entry>

<entry>
    <title>VisualC++ と OpenGL を利用した仮想物理実験室【4.1日目】等加加速度直線運動をグラフ化する</title>
    <link rel="alternate" type="text/html" href="http://www.natural-science.or.jp/article/20100225231617.php" />
    <id>tag:www.natural-science.or.jp,2010://12.9437</id>

    <published>2010-02-25T14:16:17Z</published>
    <updated>2010-02-25T14:17:40Z</updated>

    <summary> 【４日目】等加加速度直線運動では、等加加速度直線運動のシミュレーションを行ない...</summary>
    <author>
        <name>遠藤 理平</name>
        <uri>http://www.natural-science.or.jp/article/members/cat-12/</uri>
    </author>
    
        <category term="コンピュータ・シミュレーション講座 授業日誌" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="仮想物理実験室" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="eps" label="eps" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="gif" label="gif" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="gnuplot" label="gnuplot" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ofstream" label="ofstream" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="visualc等加加速度直線運動" label="VisualC++. 等加加速度直線運動" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.natural-science.or.jp/">
        <![CDATA[<p>
<a href="http://www.natural-science.or.jp/article/20100101191243.php">【４日目】等加加速度直線運動</a>では、等加加速度直線運動のシミュレーションを行ないました。
運動の様子を理解するために、<a href="http://www.natural-science.or.jp/article/20100102004839.php">【3.1日目】等加速度直線運動をグラフ化する</a>と同様、物理量同士の関係をプロット（グラフ化）することを行ないます。
今回は、時刻 t[s] 対 位置 x[m]、速度 v[m/s]、加速度 a[m/s^2]、加加速度 j[m/s^2]の関係をそれぞれプロットします。
</p>
<h2>数値データの出力</h2>
<p>
数値データを出力するために、VisualC++プログラムを若干付け足します。
</p>
<h3>１．出力ファイル名の設定</h3>
<pre>
//////////////////////////////////////////////////////////////////////////
// 変数の定義
//////////////////////////////////////////////////////////////////////////
#define _BITMAP 0 //アニメーション作成用ビットマップの保存 0:しない　1:する
<span style="font-weight:600">ofstream file1( "ball1.data" );</span>
</pre>
<p>
C++言語のファイル出力関連の「ofstream」クラスを利用します。上記は、「ofstream」クラスのインスタンス「file1」を生成し、コンストラクタで出力ファイル名（ball1.data）を指定します。
</p>
<h3>２．出力フォーマットの設定</h3>
<p>
時刻 t[s] 対 位置 x[m]、速度 v[m/s]、加速度 a[m/s^2]、加加速度 a[m/s^3]の関係をプロットするために、
時刻 t[s] の時の位置 x[m]、速度 v[m/s]、加速度 a[m/s^2]、加加速度 a[m/s^3]のデータをスペース区切りで1行とします。
</p>
<pre>
時刻1 座標1 速度1 加速度1 加加速度1
時刻2 座標2 速度2 加速度2 加加速度2
時刻3 座標3 速度3 加速度3 加加速度3
・・・
</pre>
<p>
C++言語の「ofstream」クラスで出力を行なうためには、「&lt;&lt;」演算子を利用します。
具体的には次のように書きます。
</p>
<h4>プログラム</h4>
<pre>
//--------------------------------------------------------
// 計算と物体の描画
//--------------------------------------------------------
void Calculate(){
  t = dt * double(tn);
  <span style="font-weight:600">file1 &lt;&lt; t &lt;&lt; &quot; &quot; &lt;&lt; ball1.x &lt;&lt; &quot; &quot; &lt;&lt; ball1.vx &lt;&lt; &quot; &quot; &lt;&lt; ball1.ax &lt;&lt; &quot; &quot; &lt;&lt; ball1.jx &lt;&lt;endl;</span>
  //位置の算出
  ball1.x = ball1.x + ball1.vx * dt;
  ball1.y = ball1.y + ball1.vy * dt;
  ball1.z = ball1.z + ball1.vz * dt;
  //速度の算出
  ball1.vx = ball1.vx + ball1.ax * dt;
  ball1.vy = ball1.vy + ball1.ay * dt;
  ball1.vz = ball1.vz + ball1.az * dt;
  //加速度の算出
  ball1.ax = ball1.ax + ball1.jx * dt;
  ball1.ay = ball1.ay + ball1.jy * dt;
  ball1.az = ball1.az + ball1.jz * dt;
  tn++;
}
</pre>
<p>
インスタンス「file1」に左から順番に「t」「　(スペース)」「ball1.x」「　(スペース)」「ball1.vx」「　(スペース)」「ball1.ax」「　(スペース)」「ball1.jx」「endl（改行）」を入れることで、意図どおりファイル出力することができます。プログラムの実行が終了するまでの間の出力し続けます。
このようなスペースで区切られたデータは、SSVデータ（Space-Separated Values）呼ばれます。
スペースのほかには、カンマ区切り（CSV）タブ区切り（TSV）などもあります。
</p>
<h4>出力結果（ファイル名：ball1.data）</h4>
<pre>
0 0 0 0 1
0.01 0 0 0.01 1
0.02 0 0.0001 0.02 1
0.03 1e-006 0.0003 0.03 1
・・・
</pre>
<h2>数値データのグラフへのプロット</h2>
<p>
 gnuplot を利用して数値データをプロットします（参照：<a href="http://www.natural-science.or.jp/article/20091231013959.php">【0.1日目】グラフ作成ソフト gnuplot のインストールと使い方</a> ）。上記で出力した数値データファイル「ball1.data」を gnuplot の実行ファイルがある場所（「C:\gnuplot/bin/」）に移動します。gnuplot のコマンドでテンプレートを読み込ませて、グラフを出力します。
</p>
<h3>テンプレート（ファイル名：ball1.plt）</h3>
<pre>
plot "ball1.data" using 1:2 with line ,\
     "ball1.data" using 1:3 with line ,\
     "ball1.data" using 1:4 with line ,\
     "ball1.data" using 1:5 with line 
</pre>
<p>
「ball1.data」にある数値データをプロットします。
「using 1:2」は、タブ区切りされたデータの「1列目」対「2列目」をプロットせよ、「width line」は、点を直線で結べという命令になります。
上記では、「using 1:2」で t-x グラフ、「using 1:3」で t-v グラフ、「using 1:4」で t-a グラフ、「using 1:5」で t-j グラフをプロットします。
</p>
<h3>gnuplot コマンド</h3>
<p>
テンプレートファイル「ball1.plt」を gnuplot の実行ファイルがある場所（「C:\gnuplot/bin/」）に移動します、gnuplot コマンドで、次のコマンド入力します。
</p>
<pre>
load "ball1.plt"
</pre>
<h3>出力結果</h3>
<p style="text-align:center">
<img src="http://www.natural-science.or.jp/images/20100225-01.gif" alt="" />
</p>


<h3>gifファイルの生成テンプレート（ファイル名：ball1_.plt）</h3>
<p>
出力されたグラフを gif 形式の画像ファイルとして保存する場合には、テンプレートを次のようにします。
</p>
<pre>
set terminal gif
set output 'ball1.gif'
plot "ball1.data" using 1:2 with line ,\
     "ball1.data" using 1:3 with line ,\
     "ball1.data" using 1:4 with line ,\
     "ball1.data" using 1:5 with line 
</pre>

<h3>eps ファイルの生成テンプレート（ファイル名：ball1_.plt）</h3>
<p>
出力されたグラフを eps 形式の画像ファイルとして保存する場合には、テンプレートを次のようにします。
</p>
<pre>
set term postscript eps enhanced color 'Times-Roman' 24
set output 'ball1.eps'
plot "ball1.data" using 1:2 with line ,\
     "ball1.data" using 1:3 with line ,\
     "ball1.data" using 1:4 with line ,\
     "ball1.data" using 1:5 with line 
</pre>
<p>
「'Times-Roman' 24」は、フォントとサイズを指定します。
</p>
<!--
<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="20100225-01.gif" src="http://www.natural-science.or.jp/images/20100225-01.gif" width="556" height="382" class="mt-image-none" style="" /></span>
-->
<mt:include module="仮想物理実験室　コンテンツ" />
<mt:include module="OpenGL入門　コンテンツ" />
]]>
        
    </content>
</entry>

</feed>
