我正在学习 F#,我第一次尝试使用度量单位的概念。我有以下问题:
最后一个 let(getPosition 函数中的变量 y 给了我以下错误:“测量单位 ''u ^ 2 m/second' 与测量单位 'm' 不匹配”。公式中是否有问题或这是我使用操作系统的计量单位吗?
我正在使用 Microsoft.FSharp.Data.UnitSystems.SI 中定义的度量单位。有没有办法不指定使用较短版本的名称?(例如 UnitNames.second 与秒)。
我必须使用函数 cos 和 sin。这两个函数需要一个浮点数,而不是浮点数。我使用 LanguagePrimitives.FloatWithMeasure 将浮点数转换为度量单位。这是唯一的方法吗?它使代码非常冗长。
谢谢!
open System
open Microsoft.FSharp.Data.UnitSystems.SI
module GeneralBallisticTrajectory =
[<Measure>] type radian
let gravitationalAcceleration : float<UnitNames.metre/UnitNames.second^2> = 9.80665<UnitNames.metre/UnitNames.second^2>
let getPosition (angle: float<radian>) (velocity: float<UnitNames.metre/UnitNames.second>) (t: float<UnitNames.second>) =
let x = velocity * t * (cos (float angle) |> LanguagePrimitives.FloatWithMeasure<UnitNames.metre/UnitNames.second>)
let abc = (0.5 * gravitationalAcceleration) * t * t // returns float<UnitNames.metre>
// The unit of measure 'UnitNames.metre' does not match the unit of measure 'UnitNames.metre ^ 2/UnitNames.second'
let y = (velocity * t * (sin (float angle) |> LanguagePrimitives.FloatWithMeasure<UnitNames.metre/UnitNames.second>)) - abc
(x, y)