5 type Ellipse (cx
: float, cy
: float, a
: float, b
: float, alpha
: float) =
10 member this
.Alpha = alpha
11 member this
.Area = a
* b
* Math.PI
13 // Does the ellipse contain the point (x, y)?.
14 member this
.Contains x y
=
15 ((x - cx
) * cos
alpha + (y
- cy
) * sin
alpha) ** 2.0 / a
** 2.0 + ((x - cx
) * sin
alpha - (y
- cy
) * cos
alpha) ** 2.0 / b
** 2.0 <= 1.0
17 // A line is defined as : y = mx + l
18 member this
.CutALine (m
: float) (l
: float) : bool =
19 -2.0 * l
** 2.0 + a
** 2.0 + m
** 2.0 * a
** 2.0 + b
** 2.0 + m
** 2.0 * b
** 2.0 -
20 4.0 * m
* l
* cx
- 2.0 * m
** 2.0 * cx
** 2.0 + 4.0 * l
* cy
+ 4.0 * m
* cx
* cy
-
21 2.0 * cy
** 2.0 + (-1.0 + m
** 2.0) * (a
** 2.0 - b
** 2.0) * cos
(2.0 * alpha) - 2.0 * m
* (a
** 2.0 - b
** 2.0) * sin
(2.0 * alpha) > 0.0
23 member this
.CutAVericalLine (y
: float) : bool =
24 a
** 2.0 + b
** 2.0 - 2.0 * y
** 2.0 + 4.0 * y
* cx
- 2.0 * cx
** 2.0 + a
** 2.0 * cos
(2.0 * alpha) - b
** 2.0 * cos
(2.0 * alpha) > 0.0
26 member this
.CutAnHorizontalLine (x: float) : bool =
27 a
** 2.0 + b
** 2.0 - 2.0 * x ** 2.0 + 4.0 * x * cy
- 2.0 * cy
** 2.0 - a
** 2.0 * cos
(2.0 * alpha) + b
** 2.0 * cos
(2.0 * alpha) > 0.0