tangxu
2024-01-27 29a6de30e328c46cbbcae15066f449b0660c2db1
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
namespace Yw.Curve
{
    /// <summary>
    /// 装置曲线辅助类
    /// </summary>
    public class DeviceCurveHelper
    {
 
        /// <summary>
        /// 
        /// </summary>
        /// <param name="CurveExpressQH"></param>
        /// <param name="designPoint"></param>
        /// <param name="deviceCurveZeroH"></param>
        /// <param name="isExendCurve">当designPoint超过曲线时, 是否延长装置线到designPoint位置</param>
        /// <param name="fitPointNum"></param>
        /// <param name="sectPoint"></param>
        /// <returns></returns>
        public static DeviceCurve CalcuDeviceCurve(CurveExpress CurveExpressQH, CurvePoint designPoint, double deviceCurveZeroH, bool isExendCurve, int fitPointNum, out CurvePoint sectPoint)
        {
            sectPoint = GetSectPoint(CurveExpressQH, designPoint, deviceCurveZeroH);
            if (sectPoint == null)
            {
                return null;
            }
            if (isExendCurve)
            {
                Yw.Curve.CurvePoint endPt;
                if (sectPoint.X > designPoint.X)
                    endPt = sectPoint;
                else
                    endPt = designPoint;
 
                //
                return new Yw.Curve.DeviceCurve(deviceCurveZeroH, endPt, fitPointNum, CurveExpressQH.FitType);
            }
            else
            {
                return new Yw.Curve.DeviceCurve(deviceCurveZeroH, sectPoint, fitPointNum, CurveExpressQH.FitType);
            }
        }
 
        /// <summary>
        /// 
        /// </summary>
        public static CurvePoint GetSectPoint(CurveExpress CurveExpressQH, CurvePoint designPoint, double equipCurveZeroH)
        {//有一种情况: 用包络法有交点(在最末尾),但用装置曲线绘制时,与装置曲线没有交点,因为交点已超过曲线最大值
            double ratioExtend = 1.15;//CurveExpressQH适当延长一点
            var sectPoint = ParabolaHCurveHelper.GetSectPoint(CurveExpressQH, designPoint, equipCurveZeroH, ratioExtend);
            if (sectPoint == null || sectPoint.IsZeroPoint())
            {
                return null;
            }
            if (sectPoint.X > CurveExpressQH.Max * ratioExtend)
            {
                return null;
            }
 
            return sectPoint;
        }
 
        /// <summary>
        /// 
        /// </summary>
        public static CurvePoint GetSectPoint(CurveExpress CurveExpressQH, CurvePoint DesignPoint, double equipCurveZeroH, double ratioExtend)
        {//有一种情况: 用包络法有交点(在最末尾),但用装置曲线绘制时,与装置曲线没有交点,因为交点已超过曲线最大值
 
            var sectPoint = ParabolaHCurveHelper.GetSectPoint(CurveExpressQH, DesignPoint, equipCurveZeroH, ratioExtend);
            if (sectPoint == null || sectPoint.IsZeroPoint())
            {
                return null;
            }
            if (sectPoint.X > CurveExpressQH.Max * ratioExtend)
            {
                return null;
            }
 
            return sectPoint;
        }
 
    }
}