module ParasitemiaCore.Utils
+open System
+open System.Drawing
+
open Types
let inline roundInt v = v |> round |> int
let inline dprintfn fmt =
Printf.ksprintf System.Diagnostics.Debug.WriteLine fmt
-let inline lineFromTwoPoints (p1: PointD) (p2: PointD) : Line =
+let inline lineFromTwoPoints (p1 : PointF) (p2 : PointF) : 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)
+ Line (a, b)
-let inline pointFromTwoLines (l1: Line) (l2: Line) : PointD =
+let inline pointFromTwoLines (l1 : Line) (l2 : Line) : PointF =
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)
+ PointF (x, y)
-let inline linePassThroughSegment (l: Line) (p1: PointD) (p2: PointD) : bool =
+let inline linePassThroughSegment (l : Line) (p1 : PointF) (p2 : PointF) : bool =
let p = pointFromTwoLines l (lineFromTwoPoints p1 p2)
sign (p.X - p1.X) <> sign (p.X - p2.X)
-let inline squaredDistanceTwoPoints (p1: PointD) (p2: PointD) =
+let inline squaredDistanceTwoPoints (p1 : PointF) (p2 : PointF) =
(p1.X - p2.X) ** 2.f + (p1.Y - p2.Y) ** 2.f
-let inline distanceTwoPoints (p1: PointD) (p2: PointD) =
+let inline distanceTwoPoints (p1 : PointF) (p2 : PointF) =
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
+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