ningshuxia
9 天以前 018bfb9c78088d9cd7b9371edcd2102abd594b4d
水力计算曲线 报错修复
已删除1个文件
已修改5个文件
55 ■■■■■ 文件已修改
HStation.Xhs.Core.sdf 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/PBS.WinFrmUI.Hydro/03-model-edit/00-core/ModelEditPage.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/PBS.WinFrmUI.Hydro/05-system-curve/02-chart/DynamicThresholdProcessor.cs 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/PBS.WinFrmUI.Hydro/05-system-curve/02-chart/SystemCurveChartCtrl.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Phart.Core/01-pump/04-special/01-operation/PumpOperationChart.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Phart.Core/01-pump/04-special/02-working-view/PumpWorkingViewChart.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HStation.Xhs.Core.sdf
Binary files differ
WinFrmUI/PBS.WinFrmUI.Hydro/03-model-edit/00-core/ModelEditPage.cs
@@ -4,7 +4,7 @@
{
    public partial class ModelEditPage : DocumentPage
    {
        public ModelEditPage()
        public ModelEditPage()
        { 
            InitializeComponent();
            this.facilityTreeListCtrl1.SelectFacilityEvent += FacilityTreeListCtrl1_SelectFacilityEvent;
@@ -18,6 +18,7 @@
        private PropertyForm _propertyForm;
        private bool _isInitial = false;
        /// <summary>
        /// 初始化数据源
        /// </summary>
WinFrmUI/PBS.WinFrmUI.Hydro/05-system-curve/02-chart/DynamicThresholdProcessor.cs
@@ -1,22 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PBS.WinFrmUI.Hydro
namespace PBS.WinFrmUI.Hydro
{
    public class DynamicThresholdProcessor
    {
    {
        public static List<Yw.Geometry.Point2d> FilterWithDynamicSigma(List<Yw.Geometry.Point2d> rawData)
        {
            return ProcessGroup(rawData);
        }
        private static List<Yw.Geometry.Point2d> ProcessGroup(List<Yw.Geometry.Point2d> group)
         {
        {
            const int minSize = 3;
            if (group.Count < minSize)
            if (group.Count < minSize)
                return group;
            var pressures = group.Select(p => p.Y).ToList();
@@ -24,24 +20,24 @@
            // 计算统计量
            var (mean, stdDev) = CalculateStats(pressures);
            double skewness = CalculateSkewness(pressures);
            if (group.Count > 5)
            {
            }
            // 动态调整σ倍数
            double sigmaMultiplier = CalculateSigmaMultiplier(skewness);
            if (sigmaMultiplier==3)
            {
            }
            // 计算边界
            double lower = mean - sigmaMultiplier * stdDev;
            double upper = mean + sigmaMultiplier * stdDev;
            return group.Where(p => p.Y >= lower && p.Y <= upper).ToList();
        }
        // 核心统计计算
        private static (double mean, double stdDev) CalculateStats(List<double> values)
@@ -50,6 +46,7 @@
            double stdDev = Math.Sqrt(values.Sum(v => Math.Pow(v - mean, 2)) / (values.Count - 1));
            return (mean, stdDev);
        }
        // 偏度计算(Pearson's moment coefficient)
        private static double CalculateSkewness(List<double> values)
@@ -60,10 +57,10 @@
            return (sum * values.Count) / ((values.Count - 1) * (values.Count - 2));
        }
        // 动态σ倍数计算规则
        private static double CalculateSigmaMultiplier(double skewness)
        {
        {
            return skewness switch
            {
                > 1.0 => 2.0,    // 强正偏态
@@ -74,5 +71,6 @@
            };
        }
    }
}
WinFrmUI/PBS.WinFrmUI.Hydro/05-system-curve/02-chart/SystemCurveChartCtrl.cs
@@ -1,7 +1,5 @@
using DevExpress.CodeParser;
using DevExpress.Utils;
using DevExpress.Utils;
using DevExpress.XtraCharts;
using System.Linq;
using Yw.WinFrmUI.Phart;
namespace PBS.WinFrmUI.Hydro
WinFrmUI/Yw.WinFrmUI.Phart.Core/01-pump/04-special/01-operation/PumpOperationChart.cs
@@ -367,9 +367,17 @@
                return;
            }
            var equip_pt_list = Yw.Pump.PerformParabolaHelper.GetEquipCurvePointListByQH(_vm.CurveQH.GetPerformCurve(Yw.Ahart.eCurveType.QH, _feat_type_qh), _equip_pt, start_head.Value, 30, true, out Yw.Geometry.Point2d sect_pt);
            if (equip_pt_list == null || sect_pt == null)
            var temp_curve = _vm.CurveQH.GetPerformCurve(Yw.Ahart.eCurveType.QH, _feat_type_qh);
            var equip_pt_list = Yw.Pump.PerformParabolaHelper.GetEquipCurvePointListByQH(temp_curve, _equip_pt, start_head.Value, 30, true, out Yw.Geometry.Point2d sect_pt);
            if (equip_pt_list == null || !equip_pt_list.Any())
                return;
            if (equip_pt_list.Exists(x=>x.IsInvalid()))
                return;
            if (sect_pt==null)
                return;
            double flow = 0, head = 0;
WinFrmUI/Yw.WinFrmUI.Phart.Core/01-pump/04-special/02-working-view/PumpWorkingViewChart.cs
@@ -445,8 +445,12 @@
                {
                    var qh_pt_list = vm.CurveQH.GetPointList(_feat_type_qh);
                    var max_ratio = vm.Q / qh_pt_list.Max(x => x.X) * 1.05;
                    {
                    {
                        qh_pt_list = qh_pt_list.GetExpandPointList(_feat_type_qh, 1, max_ratio);
                        if (qh_pt_list == null || !qh_pt_list.Any())
                        {
                            continue;
                        }
                        var xxx = qh_pt_list.Select(x => x.X);
                        var yyy = qh_pt_list.Select(x => x.Y);