🗻
トレインによる空気抵抗削減効果と高地効果を勘案した富士ヒル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
パラメーター
- 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
出力
コードでは、異なる速度でのワット/体重(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()
Discussion