gpt4 book ai didi

java - 在 jscience 中使用惯性矩

转载 作者:行者123 更新时间:2023-12-01 10:55:06 24 4
gpt4 key购买 nike

我正在制作一个简单的物理计算器中使用 jscience。我需要计算给定一些齿轮和旋转圆柱体的转动惯量。

我更喜欢用jscience,但是jscience似乎没有转动惯量的测量方法?或者转动惯量是否以其他形式表示?来自 these formulas我知道转动惯量可以用kg*m^2来描述。

查看 jscience 中的其他数量接口(interface),我尝试模仿“Mass”接口(interface)并创建了自己的数量接口(interface),名为“MomentOfInertia”:

package jscience;

import javax.measure.quantity.Quantity;
import javax.measure.unit.Unit;

public interface MomentOfInertia extends Quantity {

public final static Unit<MomentOfInertia> UNIT =
SI.KILOGRAM.times(SI.SQUARE_METRE).asType(MomentOfInertia.class);

}

接下来我尝试定义惯性矩:

public static void main(String[] args) throws Exception {
Amount<MomentOfInertia> moi = Amount.valueOf(1000,
SI.KILOGRAM.times(SI.SQUARE_METRE).asType(MomentOfInertia.class));

System.out.println(moi);
}

但是,如果不抛出以下异常,则不会运行:

Exception in thread "main" java.lang.ExceptionInInitializerError
at sun.misc.Unsafe.ensureClassInitialized(Native Method)
at sun.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(UnsafeFieldAccessorFactory.java:43)
at sun.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:142)
at java.lang.reflect.Field.acquireFieldAccessor(Field.java:1088)
at java.lang.reflect.Field.getFieldAccessor(Field.java:1069)
at java.lang.reflect.Field.get(Field.java:393)
at javax.measure.unit.Unit.asType(Unit.java:170)
at test.Test.main(Test.java:8)
Caused by: java.lang.NullPointerException
at javax.measure.unit.Unit.asType(Unit.java:174)
at jscience.MomentOfInertia.<clinit>(MomentOfInertia.java:10)
... 8 more

TLDR:(如何)在 jscience 中定义转动惯量?

最佳答案

我对JScience不熟,不过看路Torque定义为:

public interface Torque extends Quantity {
public final static Unit<Torque> UNIT =
new ProductUnit<Torque>(SI.NEWTON.times(SI.METRE));
}

您在这里遇到的问题是循环初始化之一:您正在调用 asType 来获取要分配给 MomentOfInertia.UNIT 的值,但是 asType(MomentOfInertia.class) 需要 the value of MomentOfInertia.UNIT ,当前为 null,因为尚未分配。

因此,类似以下内容可能会起作用:

public interface MomentOfInertia extends Quantity {

public final static Unit<MomentOfInertia> UNIT =
new ProductUnit<MomentOfInertia>(SI.KILOGRAM.times(SI.SQUARE_METRE));

}

关于java - 在 jscience 中使用惯性矩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33646720/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com