Tag: 三角学

Java Math.cos()方法在预期时不返回0

在Windows 7 PC上使用Java(不确定是否重要)并在应该返回0的值(如pi / 2)上调用Math.cos()而不是返回小值,但是除非我误解,否则返回的值很小从零开始大于1 ulp。 Math.cos(Math.PI/2) = 6.123233995736766E-17 Math.ulp(Math.cos(Math.PI/2)) = 1.232595164407831E-32 这实际上是在1 ulp内,我只是感到困惑? 这是否是一个可以接受的解决这种轻微不准确的包装方法? public static double cos(double a){ double temp = Math.abs(a % Math.PI); if(temp == Math.PI/2) return 0; return Math.cos(a); }

将Math.sin(x)的结果转换为java中度数的结果

我想转换Math.sin(x) ,其中x在弧度中的结果将给出x作为度数而不是弧度。 我已经使用了普通方法和java内置的度和弧度之间的转换方法,但是我传递给Math.sin()方法的任何参数都被视为弧度,从而导致我的转换是徒劳的。 我希望输入一个sin输入,就像输入被处理为度数而不是像Math.sin()方法那样的弧度。

简单的圆圈旋转(模拟运动)

我在Java中有一个简单的动画,它包含一个在窗口移动的轮子。 它只是一个普通的圆圈,从左侧开始离开屏幕,进入并继续向右,直到它离开屏幕。 然后它循环并重复这个过程。 X是包含车轮位置的变量。 它可以在 – (车轮宽度)和窗口尺寸+车轮宽度之间。 我想通过在这个轮子中画一个圆圈来模拟旋转,这个圆圈围绕圆圈旋转,就好像它被连接一样。 想象一下现实生活中的自行车车轮,车轮上有一面红旗。 随着车轮的旋转,当车轮前进时,车轮边缘上的红旗将会移动。 这是我想要的行为。 我得到一个百分比来传递到我的轮子类这样: int percentage = x/windowWidth; 车轮移动的每个框架,我称为wheel.rotate(percentage) 。 这是实施: private int diameter = 50; private final int SPOKE_DIAMETER = diameter/5; public void rotate(double percent){ this.percent = percent; this.theta = percent*(PI*2); System.out.println(percent*PI); } public void paintComponent(Graphics canvas) { // wheel canvas.setColor(Color.gray); canvas.fillOval(0, 0, diameter, diameter); // […]

Java的快速超越/三角函数

由于java.lang.Math中的三角函数非常慢:是否有一个快速且良好近似的库? 似乎可以在不损失太多精度的情况下快速进行几次计算。 (在我的机器上,乘法需要1.5ns,而java.lang.Math.sin需要46ns到116ns)。 遗憾的是,还没有办法使用硬件function。 更新:function应该足够准确,比如GPS计算。 这意味着您需要至少7个十进制数字的精度,这排除了简单的查找表。 它应该比基本x86系统上的java.lang.Math.sin快得多。 否则就没有意义了。 对于超过pi / 4的值,除了硬件function之外,Java还会进行一些昂贵的计算 。 这样做有充分的理由,但有时你更关心速度而不是最后一位精度。