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;
}
}
}