在科学中使用惯性矩

问题描述 投票:0回答:1

我正在用一个简单的物理计算器来使用jscience。给定一些齿轮和旋转缸,我需要计算惯性矩。

我更喜欢使用jscience,但是jscience似乎没有惯性矩的度量?还是惯性矩表示为其他?从these formulas中我可以得出,惯性矩可以用kg * m ^ 2来描述。

[通过查看jscience中的其他数量接口,我尝试模仿“ Mass”接口并创建了自己的名为“ 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 :(如何定义jsci​​ence中的惯性矩?

java physics jscience
1个回答
1
投票

我不熟悉JScience,但是请看Torque的定义方式:

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
© www.soinside.com 2019 - 2024. All rights reserved.