+ res
+
+let inline lineFromTwoPoints (p1: PointD) (p2: PointD) : Line =
+ let a = (p1.Y - p2.Y) / (p1.X - p2.X)
+ let b = -(p2.X * p1.Y - p1.X * p2.Y) / (p1.X - p2.X)
+ Line(a, b)
+
+let inline pointFromTwoLines (l1: Line) (l2: Line) : PointD =
+ let x = -(l1.B - l2.B) / (l1.A - l2.A)
+ let y = -(l2.A * l1.B - l1.A * l2.B) / (l1.A - l2.A)
+ PointD(x, y)
+
+let inline squaredDistanceTwoPoints (p1: PointD) (p2: PointD) =
+ (p1.X - p2.X) ** 2.0 + (p1.Y - p2.Y) ** 2.0
+
+let distanceTwoPoints (p1: PointD) (p2: PointD) =
+ squaredDistanceTwoPoints p1 p2 |> sqrt
+
+let countCells (cells: Cell list) : int * int =
+ cells |> List.fold (fun (total, infected) { cellClass = cellClass } ->
+ match cellClass with
+ | HealthyRBC -> (total + 1, infected)
+ | InfectedRBC -> (total + 1, infected + 1)
+ | Peculiar -> (total, infected)) (0, 0)
\ No newline at end of file