35 lines
1.0 KiB
C#
35 lines
1.0 KiB
C#
namespace KLHZ.Trader.Core.Math.Utils
|
|
{
|
|
public static class Lines
|
|
{
|
|
public static (float x, float y) LinesCrossing(float k1, float b1, float k2, float b2)
|
|
{
|
|
var x = (b2 - b1) / (k1 - k2);
|
|
var y = k1 * x + b1;
|
|
|
|
return (x, y);
|
|
}
|
|
|
|
public static bool IsLinesCrossing(DateTime time1, DateTime time2, float val1_1, float val1_2, float val2_1, float val2_2)
|
|
{
|
|
var dtime = (float)(time2 - time1).TotalSeconds;
|
|
|
|
var dval1 = (val1_2 - val1_1);
|
|
var k1 = dval1 / dtime;
|
|
var b1 = val1_1;
|
|
|
|
var dval2 = val2_2 - val2_1;
|
|
var k2 = dval2 / dtime;
|
|
var b2 = val2_1;
|
|
|
|
if (k1 != k2)
|
|
{
|
|
var cross = LinesCrossing(k1, b1, k2, b2);
|
|
var crossingTimestamp = time1.AddSeconds(cross.x);
|
|
return crossingTimestamp >= time1 && crossingTimestamp <= time2;
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
}
|