F #을 배우고 있으며 처음으로 측정 단위 개념을 사용하려고합니다. 나는 다음과 같은 질문이 : " '^ 2m/초 U'측정 단위와 일치하지 않는 '측정 단위 다음에서는 getPosition 기능에측정 단위를 사용하여 궤적 계산
마지막하자 (변수 y를하는 것은 나에게 다음과 같은 오류를 제공합니다 수식에 문제가 있거나 사용량 측정 단위가 무엇입니까?
Microsoft.FSharp.Data.UnitSystems.SI에 정의 된 측정 단위를 사용하고 있습니다. 방법이 있습니까? (예 : UnitNames.second vs 초)
나는 cos과 sin 함수를 사용해야합니다. 두 함수는 float가 아닌 float을 기대합니다. Float을 측정 단위로 변환하기 위해 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)