首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转动惯量在jscience中的应用

转动惯量在jscience中的应用
EN

Stack Overflow用户
提问于 2015-11-11 08:29:56
回答 1查看 240关注 0票数 0

我在一个简单的物理计算器中使用jscience。我需要计算一些齿轮和旋转圆柱的惯性时刻。

我更喜欢使用jscience,但似乎jscience没有测量转动惯量吗?或者,转动惯量是否表示为其他东西?从这些公式中,我得到转动惯量可以用kg*m^2来描述。

查看jscience中的其他quantity接口,我尝试模仿"Mass“接口,并创建了自己的quantity接口"MomentOfInertia":

代码语言:javascript
复制
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);

}

接下来,我试图定义一个转动惯量:

代码语言:javascript
复制
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);
}

但是,如果不抛出以下异常,这将无法运行:

代码语言:javascript
复制
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中的转动惯量?)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-11 08:46:11

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

代码语言:javascript
复制
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)需要MomentOfInertia.UNIT (当前为null ),因为它没有被分配。

因此,下面这样的内容可能会奏效:

代码语言:javascript
复制
public interface MomentOfInertia extends Quantity {

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

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33646720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档