namespace Yw.Geometry
|
{
|
public class EquipCurveHelper
|
{
|
/// <summary>
|
/// 根据流量扬程线,以及给定设计点, 返回交点和装置曲线
|
/// </summary>
|
/// <param name="qh"></param>
|
/// <param name="equip_pt"></param>
|
/// <param name="sect_pt"></param>
|
/// <returns></returns>
|
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);
|
}
|
|
/// <summary>
|
/// 根据流量扬程线,以及给定设计点,以及装置曲线0流量时的扬程点, 返回交点和装置曲线
|
/// </summary>
|
/// <param name="qh"></param>
|
/// <param name="equip_pt"></param>
|
/// <param name="equip_zero_h"></param>
|
/// <param name="sect_pt"></param>
|
/// <returns></returns>
|
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;
|
}
|
|
|
///// <summary>
|
///// 根据流量扬程线,以及给定设计点,以及装置曲线0流量时的扬程点, 返回交点和装置曲线
|
///// </summary>
|
///// <param name="qh"></param>
|
///// <param name="equip_pt"></param>
|
///// <param name="equip_zero_h"></param>
|
///// <param name="sect_pt"></param>
|
///// <returns></returns>
|
//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);
|
//}
|
|
/// <summary>
|
/// 根据流量扬程线,以及给定设计点,以及装置曲线0流量时的扬程点, 返回交点和装置曲线
|
/// </summary>
|
/// <param name="qh"></param>
|
/// <param name="equip_pt"></param>
|
/// <param name="equip_zero_h"></param>
|
/// <param name="is_exend"></param>
|
/// <param name="fit_pt_count"></param>
|
/// <param name="sect_pt"></param>
|
/// <returns></returns>
|
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);
|
}
|
}
|
|
/// <summary>
|
/// 计算装置曲线与流量扬程曲线的交点
|
/// </summary>
|
/// <param name="qh"></param>
|
/// <param name="equip_pt"></param>
|
/// <param name="equip_zero_h"></param>
|
/// <returns></returns>
|
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;
|
}
|
|
/// <summary>
|
/// 计算装置曲线与流量扬程曲线的交点
|
/// </summary>
|
/// <param name="CurveExpressQH"></param>
|
/// <param name="DesignPoint"></param>
|
/// <param name="equip_zero_h"></param>
|
/// <param name="ratio_extend"></param>
|
/// <returns></returns>
|
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;
|
}
|
|
}
|
}
|