合力の計算

合力の計算



ニュートンの運動の法則


Fnetの型はVector

■第一法則
Fnet(合力)= 0 のとき、物体の運動は変化しない(加速度a=0となる)

■第二法則
Fnet = m×a (m=質量、a=加速度)
この公式を利用して合力と質量から加速度を導ける。これは物理演算でよく利用する

■第三法則
いかなる力に対しても大きさが同じで向きが正反対の力が存在する
ふたつの物体が接触する時は大きさが同じで向きが正反対の力を互いに及ぼしあう

サンプルコード


using UnityEngine;
using System.Collections;

public class PhysicTest6 : MonoBehaviour {

  void Start () {
       print(SigmaF(400,30,222.42f,0.25f));
       print(SigmaF(new Vector2(346.41f,200),222.42f,0.25f));
       print(CalcVelocity( SigmaF(400,30,222.42f,0.25f),CalcMass(-222.42f)));
       print(CalcVelocity(400,30,222.42f,0.25f));
   }

  Vector2 CalcVelocity(float forceN,float degree,float weightN,float mueK){
       return CalcVelocity( SigmaF(forceN,degree,weightN,mueK),CalcMass(-weightN) );
   }

  Vector2 CalcVelocity(Vector2 sigmaF,float mass){
       return sigmaF / mass;
   }

  float CalcWeight(float mass_Kg,float gravity=-9.8f){
       return mass_Kg * gravity;
   }

  float CalcMass(float weightN,float gravity=-9.8f){
       return weightN / gravity;
   }

  Vector2 SigmaF(float forceN,float degree,float weightN,float mueK){
       Vector2 fp,fk;
       fp = CalcForce(degree,forceN);
       fk = CalcFriction(mueK,degree+180,weightN);
       return fp + fk; 
   }

  Vector2 SigmaF(Vector2 forceVector,float weightN,float mueK){
       Vector2 fp,fk;
       fp = forceVector;
       Vector2 flipVecNorm = (forceVector * -1).normalized;
       fk = CalcFriction(mueK,flipVecNorm,weightN);
       return fp + fk;
   }

  Vector2 CalcFriction(float mueK,float degree,float weightN){
       float fk = mueK * weightN;
       return CalcForce(degree,fk);
   }

  Vector2 CalcFriction(float mueK,Vector2 flipVecNorm,float weightN){
       float fk = mueK * weightN;
       return flipVecNorm * fk;
   }

  Vector2 CalcForce(float degree,float forceN){
       return new Vector2(Mathf.Cos(degree*Mathf.Deg2Rad)*forceN,Mathf.Sin(degree*Mathf.Deg2Rad)*forceN);
   }

}

  • 最終更新:2014-01-05 22:22:27

このWIKIを編集するにはパスワード入力が必要です

認証パスワード