예제 #1
0
 /// <summary>体の部位を接続する</summary>
 /// <param name="bpConnectTo">接続先の体の部位</param>
 internal void connect(BodyPart bpConnectTo)
 {
     this.bpConnectTo.Add(bpConnectTo);
     bpConnectTo.bpConnectFrom = this;
 }
예제 #2
0
        /// <summary>血流により体の部位1から体の部位2に移動する熱量[W]を計算する</summary>
        /// <param name="bodyPart1">体の部位1</param>
        /// <param name="bodyPart2">体の部位2</param>
        /// <param name="bloodType">血流の種類(動脈・深部静脈・表在静脈)</param>
        /// <returns>血流によりbodyPosition1からbodyPosition2に移動する熱量[W]</returns>
        public double GetHeatTransferWithBloodFlow(ImmutableBodyPart bodyPart1, ImmutableBodyPart bodyPart2, BodyPart.Segments bloodType)
        {
            const double RCS = HumanBody.RHO_C / 3.6d;  //流量単位がL/hなので、ここで単位を調整

            if (bodyPart1 == null || bodyPart2 == null) return 0;

            List<ImmutableBodyPart> bps = new List<ImmutableBodyPart>();
            //動脈の場合
            if (bloodType == BodyPart.Segments.Artery)
            {
                //bp1が上流の場合には熱移動を計算
                bps.AddRange(bodyPart1.BodyPartConnectTo);
                if (bps.Contains(bodyPart2)) return bodyPart1.GetTemperature(bloodType) * bodyPart2.GetBloodFlow(bloodType) * RCS;
            }
            //静脈の場合
            else if (bloodType == BodyPart.Segments.DeepVein || bloodType == BodyPart.Segments.SuperficialVein)
            {
                //bp2が上流の場合には熱移動を計算
                bps.AddRange(bodyPart2.BodyPartConnectTo);
                if (bps.Contains(bodyPart1)) return bodyPart1.GetTemperature(bloodType) * bodyPart1.GetBloodFlow(bloodType) * RCS;
            }

            return 0;
        }