From fd659f0013b866f6cad1580a2577d92b4cb9f9e0 Mon Sep 17 00:00:00 2001
From: wuww <252740454@qq.com>
Date: 星期三, 07 五月 2025 17:41:24 +0800
Subject: [PATCH] 生成降雨文件.py

---
 data/CreatRainfall.py |  113 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 113 insertions(+), 0 deletions(-)

diff --git a/data/CreatRainfall.py b/data/CreatRainfall.py
new file mode 100644
index 0000000..8fa06d2
--- /dev/null
+++ b/data/CreatRainfall.py
@@ -0,0 +1,113 @@
+import sys
+import numpy as np
+import pandas as pd
+
+
+def generate_normal_distribution(rainfall_total, max_intensity, duration):
+    """
+    鐢熸垚姝f�佸垎甯冪殑闄嶉洦鏁版嵁
+    :param rainfall_total: 闄嶉洦鎬婚噺
+    :param max_intensity: 鏈�澶ч洦寮�
+    :param duration: 闄嶉洦鏃堕棿锛堝垎閽燂級
+    :return: 闄嶉洦鏁版嵁鍒楄〃
+    """
+    mean = rainfall_total / duration
+    std_dev = (max_intensity - mean) / 3
+    rainfall = np.random.normal(mean, std_dev, duration)
+    rainfall = np.clip(rainfall, 0, None)  # 纭繚闄嶉洦寮哄害闈炶礋
+    rainfall = rainfall * rainfall_total / rainfall.sum()  # 褰掍竴鍖�
+    return rainfall
+
+
+def generate_increasing_distribution(rainfall_total, max_intensity, duration):
+    """
+    鐢熸垚閫愭笎涓婂崌鐨勯檷闆ㄦ暟鎹�
+    :param rainfall_total: 闄嶉洦鎬婚噺
+    :param max_intensity: 鏈�澶ч洦寮�
+    :param duration: 闄嶉洦鏃堕棿锛堝垎閽燂級
+    :return: 闄嶉洦鏁版嵁鍒楄〃
+    """
+    rainfall = np.linspace(0, max_intensity, duration)
+    rainfall = rainfall * rainfall_total / rainfall.sum()  # 褰掍竴鍖�
+    return rainfall
+
+
+def generate_uniform_distribution(rainfall_total, max_intensity, duration):
+    """
+    鐢熸垚骞冲潎鍒嗗竷鐨勯檷闆ㄦ暟鎹�
+    :param rainfall_total: 闄嶉洦鎬婚噺
+    :param max_intensity: 鏈�澶ч洦寮�
+    :param duration: 闄嶉洦鏃堕棿锛堝垎閽燂級
+    :return: 闄嶉洦鏁版嵁鍒楄〃
+    """
+    rainfall = np.full(duration, rainfall_total / duration)
+    return rainfall
+
+
+def generate_fluctuating_distribution(rainfall_total, max_intensity, duration):
+    """
+    鐢熸垚娉㈠姩鍒嗗竷鐨勯檷闆ㄦ暟鎹�
+    :param rainfall_total: 闄嶉洦鎬婚噺
+    :param max_intensity: 鏈�澶ч洦寮�
+    :param duration: 闄嶉洦鏃堕棿锛堝垎閽燂級
+    :return: 闄嶉洦鏁版嵁鍒楄〃
+    """
+    rainfall = np.random.uniform(0, max_intensity, duration)
+    rainfall = rainfall * rainfall_total / rainfall.sum()  # 褰掍竴鍖�
+    return rainfall
+
+
+def save_to_file(rainfall, filename):
+    """
+    灏嗛檷闆ㄦ暟鎹繚瀛樺埌鏂囦欢
+    :param rainfall: 闄嶉洦鏁版嵁鍒楄〃
+    :param filename: 鏂囦欢鍚�
+    """
+    df = pd.DataFrame({'rainfall': rainfall})
+    df.to_csv(filename, index=False)
+
+
+if __name__ == "__main__":
+    # 妫�鏌ュ弬鏁版暟閲忥紙sys.argv[0] 鏄剼鏈悕绉帮級
+    if len(sys.argv) != 6:
+        print("閿欒锛氳鎻愪緵5涓弬鏁帮紒")
+        print(
+            "鐢ㄦ硶锛歱ython 鑴氭湰鍚�.py <鍙傛暟1-csv鏂囦欢鍚�> <鍙傛暟2-闄嶉洦妯″紡:姝f�佸垎甯億骞冲潎鍒嗗竷|娉㈠姩骞冲潎鍒嗗竷|鎸佺画涓婂崌> <鍙傛暟3-闄嶉洦鎬婚噺> <鍙傛暟4-鏈�澶ч洦寮�> <鍙傛暟5-闄嶉洦鏃堕棿(鍒嗛挓)>")
+        sys.exit(1)  # 闈為浂閫�鍑虹爜琛ㄧず閿欒
+
+    rainfall_total = float(sys.argv[3])
+    max_intensity = float(sys.argv[4])
+    duration = int(sys.argv[5])
+
+    match sys.argv[2]:
+        case "姝f�佸垎甯�":
+            normal_rainfall = generate_normal_distribution(rainfall_total, max_intensity, duration)
+            save_to_file(normal_rainfall, sys.argv[1])
+        case "鎸佺画涓婂崌":
+            increasing_rainfall = generate_increasing_distribution(rainfall_total, max_intensity, duration)
+            save_to_file(increasing_rainfall, sys.argv[1])
+        case "骞冲潎鍒嗗竷":
+            uniform_rainfall = generate_uniform_distribution(rainfall_total, max_intensity, duration)
+            save_to_file(uniform_rainfall, sys.argv[1])
+        case "娉㈠姩骞冲潎鍒嗗竷":
+            fluctuating_rainfall = generate_fluctuating_distribution(rainfall_total, max_intensity, duration)
+            save_to_file(fluctuating_rainfall, sys.argv[1])
+        case _:  # 姝f�佸垎甯冿紝榛樿鍒嗘敮
+            normal_rainfall = generate_normal_distribution(rainfall_total, max_intensity, duration)
+            save_to_file(normal_rainfall, sys.argv[1])
+
+    # rainfall_total = 100  # 闄嶉洦鎬婚噺
+    # max_intensity = 10  # 鏈�澶ч洦寮�
+    # duration = 120  # 闄嶉洦鏃堕棿锛堝垎閽燂級
+
+    # 鐢熸垚涓嶅悓鍒嗗竷鐨勯檷闆ㄦ暟鎹�
+    # normal_rainfall = generate_normal_distribution(rainfall_total, max_intensity, duration)
+    # increasing_rainfall = generate_increasing_distribution(rainfall_total, max_intensity, duration)
+    # uniform_rainfall = generate_uniform_distribution(rainfall_total, max_intensity, duration)
+    # fluctuating_rainfall = generate_fluctuating_distribution(rainfall_total, max_intensity, duration)
+
+    # 淇濆瓨鍒版枃浠�
+    # save_to_file(normal_rainfall, 'normal_rainfall.csv')
+    # save_to_file(increasing_rainfall, 'increasing_rainfall.csv')
+    # save_to_file(uniform_rainfall, 'uniform_rainfall.csv')
+    # save_to_file(fluctuating_rainfall, 'fluctuating_rainfall.csv')

--
Gitblit v1.9.3