namespace Yw.Geometry { public class EquipCurveHelper { /// /// 根据流量扬程线,以及给定设计点, 返回交点和装置曲线 /// /// /// /// /// static public Yw.Geometry.EquipCurveParas CalcEquipCurve( Yw.Geometry.CubicSpline2d qh, Yw.Geometry.Point2d equip_pt, out Yw.Geometry.Point2d sect_pt) { return CalcEquipCurve(qh, equip_pt, 0, false, 11, out sect_pt); } /// /// 根据流量扬程线,以及给定设计点,以及装置曲线0流量时的扬程点, 返回交点和装置曲线 /// /// /// /// /// /// static public Yw.Geometry.CubicSpline2d CalcEquipCurve( Yw.Geometry.CubicSpline2d qh, Yw.Geometry.Point2d equip_pt, double equip_zero_h, out Yw.Geometry.Point2d sect_pt) { var equip_paras = CalcEquipCurve(qh, equip_pt, equip_zero_h, false, 11, out sect_pt); if (equip_paras != null && equip_paras.EquipCurve.IsValid()) { return equip_paras.EquipCurve; } return null; } ///// ///// 根据流量扬程线,以及给定设计点,以及装置曲线0流量时的扬程点, 返回交点和装置曲线 ///// ///// ///// ///// ///// ///// //static public Yw.Geometry.EquipCurveParas CalcEquipCurve( // Yw.Geometry.CubicSpline2d qh, // Yw.Geometry.Point2d equip_pt, // double equip_zero_h, // out Yw.Geometry.Point2d sect_pt) //{ // return CalcEquipCurve(qh, equip_pt, equip_zero_h, false, 11, out sect_pt); //} /// /// 根据流量扬程线,以及给定设计点,以及装置曲线0流量时的扬程点, 返回交点和装置曲线 /// /// /// /// /// /// /// /// static public Yw.Geometry.EquipCurveParas CalcEquipCurve( Yw.Geometry.CubicSpline2d qh, Yw.Geometry.Point2d equip_pt, double equip_zero_h, bool is_exend,//当equip_pt超过曲线时, 是否延长装置线到equip_pt位置 int fit_pt_count, out Yw.Geometry.Point2d sect_pt) { sect_pt = GetSectPoint(qh, equip_pt, equip_zero_h); if (sect_pt == null) { return null; } if (is_exend) { Yw.Geometry.Point2d end_pt; if (sect_pt.X > equip_pt.X) end_pt = sect_pt; else end_pt = equip_pt; // return new Yw.Geometry.EquipCurveParas(equip_zero_h, end_pt, fit_pt_count); } else { return new Yw.Geometry.EquipCurveParas(equip_zero_h, sect_pt, fit_pt_count); } } /// /// 计算装置曲线与流量扬程曲线的交点 /// /// /// /// /// static public Yw.Geometry.Point2d GetSectPoint( Yw.Geometry.CubicSpline2d qh, Yw.Geometry.Point2d equip_pt, double equip_zero_h) {//有一种情况: 用包络法有交点(在最末尾),但用装置曲线绘制时,与装置曲线没有交点,因为交点已超过曲线最大值 double ratio_extend = 1.15;//CurveExpressQH适当延长一点 var sect_pt = Yw.Geometry.ParabolaCurveHelper.GetSectPoint(qh, equip_pt, equip_zero_h, ratio_extend); if (sect_pt == null) { return null; } if (sect_pt.X > qh.MaxX * ratio_extend) { return null; } return sect_pt; } /// /// 计算装置曲线与流量扬程曲线的交点 /// /// /// /// /// /// static public Yw.Geometry.Point2d GetSectPoint( Yw.Geometry.CubicSpline2d CurveExpressQH, Yw.Geometry.Point2d DesignPoint, double equip_zero_h, double ratio_extend) {//有一种情况: 用包络法有交点(在最末尾),但用装置曲线绘制时,与装置曲线没有交点,因为交点已超过曲线最大值 var sect_pt = Yw.Geometry.ParabolaCurveHelper.GetSectPoint(CurveExpressQH, DesignPoint, equip_zero_h, ratio_extend); if (sect_pt == null) { return null; } if (sect_pt.X > CurveExpressQH.MaxX * ratio_extend) { return null; } return sect_pt; } } }