私は 2 か月前に JScience を発見しました。これは私のプロジェクトにとって大きな助けとなっていますが、1 つのことに苦労しています。
指定された値で直接および間接的PressureHead
に変換できる(別名水柱)ユニットを作成しようとしています。Length
Pressure
VolumetricDensity
圧力を見つけるには:Density × Gravity × Head = Pressure
ウィキペディアからの変換の例を次に示します。
1 cmH 2 O (4°C) = 999.9720 kg/m 3 × 9.80665 m/s 2 × 1 cm = 98.063754138 Pa
1 cmH 2 O は 1 cm に直接変換できます。
Pa 単位の圧力を知っていて、mH 2 O 単位の圧力水頭を見つけたいとします。これは、プロジェクトで最も頻繁に行う変換です。また、流体の密度を知る必要があります。圧力と密度は可変入力です。重力も式で知られている必要がありますが、私の目的では、標準の重力に固定できます。
圧力水頭を見つけるには:Pressure / (Density × Gravity) = Head
簡単にするために、上記の例の値を再利用し、圧力に 100 を掛けて、1 cmH 2 Oの代わりに1 mH 2 O を取得しました。
9806.3754138 Pa / (999.9720 kg/m 3 × 9.80665 m/s 2 ) = 1 mH 2 O
JScience はそのようなユニットを許可するのに十分柔軟であるように見えますが、それを作成するのに役立つ例を見たことがありません。最悪の場合、util メソッドを使用してそれらを変換することで解決するでしょう。
編集
私が見たい理想的な使用法のいくつかの例:
// Pressure to PressureHead
Amount<Pressure> pressure = Amount.valueOf(9806.3754138, PASCAL);
Amount<VolumetricDensity> density = Amount.valueOf(999.9720, KG_M3);
Amount<PressureHead> head = pressure.to(M_H2O, density);
System.out.println(pressure.doubleValue(M_H2O, density)); // 1.0
// PressureHead <-> Length
Amount<Length> length = head.to(METER);
System.out.println(head.doubleValue(METER)); // 1.0
head = length.to(M_H2O);
System.out.println(length.doubleValue(M_H2O)); // 1.0
// PressureHead to Pressure
pressure = head.to(PASCAL, density);
System.out.println(head.doubleValue(PASCAL, density)); // 9806.3754138
単位間の変換PressureHead
は簡単です。次のように追加の単位を定義できます。
Unit<PressureHead> FT_H2O = M_H2O.transform(FOOT.getConverterTo(METER));
上記の理想的な使用法では、 and をサブクラス化Amount
してオーバーロードする必要がto()
ありdoubleValue()
ます。変換を行うためのより適切な方法があるかどうか(かなりの使用法ではありませんが)、サブクラス化UnitConverter
および/またはDerivedUnit
ベースのクラスの1つが含まれていると思います。
私の一部はあきらめて、より重要なことに移れるように util メソッドの迅速かつ簡単な (そして醜い) ルートに進みたいと思っています。別の部分は、私が JScience をさらに好きになる解決策を見つけたいと思っています。