使用F#计算三角形

时间:2011-12-20 14:29:54

标签: f# geometry

我正在尝试编写一个程序来计算三角形。对于这个计算,有人能给我一个F#sharp的短代码吗?

enter image description here

这是我到目前为止所做的,但我不相信这是最好的方式:

let area a b c = 
  let s = sqrt((a + b + c) / 2) 
  sqrt(s * (s - a) * (s - b) * (s - c))

2 个答案:

答案 0 :(得分:5)

根据您所拥有的三角形类型,您似乎正在尝试应用不同的公式。如果你有三个边,你使用Heron's formula,如果你有一边你假设三角形是等边的,如果你有两边你假设三角形是正确的,两边是导管。 如果我正确解释,我会定义一个有区别的联合,如下所示:

type Triangle =
| Generic of float * float * float
| Equilateral of float
| Right of float * float

let area (t : Triangle) : float = 
  match t with 
  | Generic (a, b, c) -> let s = (a + b + c) / 2. 
                         sqrt(s*(s-a)*(s-b)*(s-c))
  | Equilateral a     -> sqrt(3.) * (a ** 2.) / 4.
  | Right (a, b)      -> (a * b) / 2.

// testing
let triangles = [Generic (2., 3., 4.); Equilateral 2.; Right (2., 3.)] 

triangles |>
List.iter (fun t -> Console.WriteLine(area t))

答案 1 :(得分:3)

只是翻译那些公式? 应该是这样的:

let area  a = (a **  2. / 4.) * sqrt 3.

let area' a b = a * b / 2.

let area'' a b c = 
    let s = (a + b + c) / 2.
    sqrt(s * (s - a) * (s - b) * (s - c))