🗻

トレインによる空気抵抗削減効果と高地効果を勘案した富士ヒルW/kg vs km/h(Ave) シミュレーション

に公開

特徴

以下2つの要素を取り入れさせて貰った富士ヒルw/kg vs km/h(Ave) シミュレーションです

トレインを組んだ場合の空気抵抗削減効果

参考文献:https://www.youtube.com/watch?v=r8PVHU3xhuM&t=457s
Author:https://twitter.com/nasupi_garage

高地走行時の高地効果

参考文献:https://funride.jp/serialization/ahead_sports_engineering/
Author:https://twitter.com/0yama

パラメーター

  1. distance_km = 24 # 富士ヒル計測区間距離(km)
  2. elevation_gain_m = 1255 # 富士ヒル計測区間獲得標高(m)
  3. Cdr = 0.97 # ロードバイクの一般的な駆動抵抗
  4. m = 69 # 体重(60kg)+自転車重量(7kg)+装備重量(2kg)
  5. weight = 60 # 体重(kg)
  6. g = 9.81 # 重力加速度
  7. CdA = 0.4
  8. rho = 1.02 # 富士ヒルの計測区間空気密度の平均値
  9. Crr = 0.00168 # Corsa Pro Speed TLR 28

出力

コードでは、異なる速度でのワット/体重(W/kg)を計算し、グラフとして表示します。グラフには、完全単独走と空気抵抗を半分にした場合のシミュレーション、さらに高地効果を加味した場合のデータが含まれます。

出力結果

実行コード

fujihill_wkg-vs-speed_reduction-of-air-resistance_altitude-effect.py
import matplotlib.pyplot as plt
import numpy as np
import math
import matplotlib as mpl
import matplotlib.font_manager as font_manager

# fontのパスは環境に応じて変更してください
path = '/Users/shinichi/Library/Fonts/ipaexg.ttf'
font_manager.fontManager.addfont(path)
mpl.rcParams['font.family'] = 'IPAexGothic'

# パワー計算関数
def calculate_power(v_kmh, Cdr, m, g, CdA, rho, Crr, distance_km, elevation_gain_m, apply_half_air_resistance=True):
    v_ms = v_kmh / 3.6  # 速度の単位変換: km/h から m/s へ
    slope_percentage = (elevation_gain_m / (distance_km * 1000)) * 100  # 勾配のパーセンテージ計算
    theta = math.atan(slope_percentage / 100)  # 勾配から角度への変換
    air_resistance_force = 0.5 * CdA * rho * v_ms**2  # 空気抵抗力の計算
    if apply_half_air_resistance:  # 空気抵抗を半分にするオプション
        air_resistance_force *= 0.5
    W = (Cdr * v_ms) + (m * g * math.sin(theta) * v_ms) + (air_resistance_force * v_ms) + (2 * Crr * m * g * math.cos(theta) * v_ms)  # 総パワー計算
    return W

# パラメータ設定
distance_km = 24 # 富士ヒル計測区間距離(km)
elevation_gain_m = 1255 # 富士ヒル計測区間獲得標高(m)
Cdr = 0.97 # ロードバイクの一般的な駆動抵抗
m = 69 # 体重(60kg)+自転車重量(7kg)+装備重量(2kg)
weight = 60 # 体重(kg)
g = 9.81 # 重力加速度
CdA = 0.4
rho = 1.02 # 富士ヒルの計測区間空気密度の平均値
Crr = 0.00168 # Corsa Pro Speed TLR 28

# 平均速度範囲の設定 / ブロンズの16km/h-プラチナの24km/hまで
speeds_kmh = np.arange(16, 24.1, 0.1)
watts_per_kg_half_resistance = []
watts_per_kg_full_resistance = []
watts_per_kg_half_resistance_altitude = []
watts_per_kg_full_resistance_altitude = []

# 各速度でのパワー計算とリストへの追加
for v_kmh in speeds_kmh:
    power_half = calculate_power(v_kmh, Cdr, m, g, CdA, rho, Crr, distance_km, elevation_gain_m, True)
    watts_per_kg_half_resistance.append(power_half / weight)
    power_full = calculate_power(v_kmh, Cdr, m, g, CdA, rho, Crr, distance_km, elevation_gain_m, False)
    watts_per_kg_full_resistance.append(power_full / weight)
    power_half_altitude = calculate_power(v_kmh, Cdr, m, g, CdA, rho, Crr, distance_km, elevation_gain_m, True) * 1.1
    watts_per_kg_half_resistance_altitude.append(power_half_altitude / weight)
    power_full_altitude = calculate_power(v_kmh, Cdr, m, g, CdA, rho, Crr, distance_km, elevation_gain_m, False) * 1.1
    watts_per_kg_full_resistance_altitude.append(power_full_altitude / weight)

# グラフ描画
plt.figure(figsize=(10, 5))
plt.plot(speeds_kmh, watts_per_kg_full_resistance, marker='x', linestyle='-', label='完全単独走', markersize=3)
plt.plot(speeds_kmh, watts_per_kg_half_resistance, marker='o', linestyle='-', label='ツキイチでFd(空気抵抗)半分', markersize=3)
plt.plot(speeds_kmh, watts_per_kg_half_resistance_altitude, marker='s', linestyle='-', label='ツキイチでFd(空気抵抗)半分、高地効果加味', markersize=3)
plt.plot(speeds_kmh, watts_per_kg_full_resistance_altitude, marker='^', linestyle='-', label='完全単独走、高地効果加味', markersize=3)
plt.title('富士ヒルシミュレーション')
plt.xlabel('平均速度 (km/h)')
plt.ylabel('ワット/体重 (W/kg)')
plt.legend()
plt.grid(True)
plt.show()

Disclaimer

Discussion