lixiaojun
2024-10-11 3cd861799e24a6fd6a06a529de6e282447417119
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
namespace Yw.Geometry
{
    public class EquipCurveHelper
    {
        /// <summary>
        /// 根据流量扬程线,以及给定设计点, 返回交点和装置曲线
        /// </summary>
        /// <param name="CurveExpressQH"></param>
        /// <param name="designPoint"></param>
        /// <param name="sectPoint"></param>
        /// <returns></returns>
        static public Yw.Geometry.EquipCurveParas CalcEquipCurve(
             Yw.Geometry.CubicSpline2d CurveExpressQH,
             Yw.Geometry.Point2d designPoint,
             out Yw.Geometry.Point2d sectPoint)
        {
            return CalcEquipCurve(CurveExpressQH, designPoint, 0, false, 11, out sectPoint);
        }
 
        /// <summary>
        /// 根据流量扬程线,以及给定设计点,以及装置曲线0流量时的扬程点, 返回交点和装置曲线
        /// </summary>
        /// <param name="CurveExpressQH"></param>
        /// <param name="designPoint"></param>
        /// <param name="equipCurveZeroH"></param>
        /// <param name="sectPoint"></param>
        /// <returns></returns>
        static public Yw.Geometry.EquipCurveParas CalcEquipCurve(
             Yw.Geometry.CubicSpline2d CurveExpressQH,
             Yw.Geometry.Point2d designPoint,
             double equipCurveZeroH,
             out Yw.Geometry.Point2d sectPoint)
        {
            return CalcEquipCurve(CurveExpressQH, designPoint, equipCurveZeroH, false, 11, out sectPoint);
        }
        /// <summary>
        /// 根据流量扬程线,以及给定设计点,以及装置曲线0流量时的扬程点, 返回交点和装置曲线
        /// </summary>
        /// <param name="CurveExpressQH"></param>
        /// <param name="designPoint"></param>
        /// <param name="equipCurveZeroH"></param>
        /// <param name="isExendCurve"></param>
        /// <param name="fitPointNum"></param>
        /// <param name="sectPoint"></param>
        /// <returns></returns>
        static public Yw.Geometry.EquipCurveParas CalcEquipCurve(
             Yw.Geometry.CubicSpline2d CurveExpressQH,
             Yw.Geometry.Point2d designPoint,
             double equipCurveZeroH,
             bool isExendCurve,//当designPoint超过曲线时, 是否延长装置线到designPoint位置
             int fitPointNum,
             out Yw.Geometry.Point2d sectPoint)
        {
            sectPoint = GetSectPoint(CurveExpressQH, designPoint, equipCurveZeroH);
            if (sectPoint == null)
            {
                return null;
            }
            if (isExendCurve)
            {
                Yw.Geometry.Point2d endPt;
                if (sectPoint.X > designPoint.X)
                    endPt = sectPoint;
                else
                    endPt = designPoint;
 
                //
                return new Yw.Geometry.EquipCurveParas(equipCurveZeroH, endPt, fitPointNum);
            }
            else
            {
                return new Yw.Geometry.EquipCurveParas(equipCurveZeroH, sectPoint, fitPointNum);
            }
        }
 
        /// <summary>
        /// 计算装置曲线与流量扬程曲线的交点
        /// </summary>
        /// <param name="CurveExpressQH"></param>
        /// <param name="designPoint"></param>
        /// <param name="equipCurveZeroH"></param>
        /// <returns></returns>
        static public Yw.Geometry.Point2d GetSectPoint(
            Yw.Geometry.CubicSpline2d CurveExpressQH,
            Yw.Geometry.Point2d designPoint,
            double equipCurveZeroH)
        {//有一种情况: 用包络法有交点(在最末尾),但用装置曲线绘制时,与装置曲线没有交点,因为交点已超过曲线最大值
            double ratioExtend = 1.15;//CurveExpressQH适当延长一点
            var sectPoint = Yw.Geometry.ParabolaCurveHelper_H.GetSectPoint(CurveExpressQH, designPoint, equipCurveZeroH, ratioExtend);
            if (sectPoint == null)
            {
                return null;
            }
            if (sectPoint.X > CurveExpressQH.MaxX * ratioExtend)
            {
                return null;
            }
 
            return sectPoint;
        }
 
        /// <summary>
        /// 计算装置曲线与流量扬程曲线的交点
        /// </summary>
        /// <param name="CurveExpressQH"></param>
        /// <param name="DesignPoint"></param>
        /// <param name="equipCurveZeroH"></param>
        /// <param name="ratioExtend"></param>
        /// <returns></returns>
        static public Yw.Geometry.Point2d GetSectPoint(
           Yw.Geometry.CubicSpline2d CurveExpressQH,
           Yw.Geometry.Point2d DesignPoint,
           double equipCurveZeroH,
           double ratioExtend)
        {//有一种情况: 用包络法有交点(在最末尾),但用装置曲线绘制时,与装置曲线没有交点,因为交点已超过曲线最大值
 
            var sectPoint = Yw.Geometry.ParabolaCurveHelper_H.GetSectPoint(CurveExpressQH, DesignPoint, equipCurveZeroH, ratioExtend);
            if (sectPoint == null)
            {
                return null;
            }
            if (sectPoint.X > CurveExpressQH.MaxX * ratioExtend)
            {
                return null;
            }
 
            return sectPoint;
        }
 
    }
}