如何检查矩形是否为黄金矩形?

时间:2016-12-08 23:11:58

标签: java math precision

我有一个名为Rectangle的类。该类有两个属性width和height。 我需要检查Rectangle类是否具有黄金比例(高度/宽度= 1.6),如果是,我需要返回true,否则返回false。

这是我的班级:

class Rectangle {
   private int x, y;
   private int height, width;

   public boolean isGoldenRatio()
   {
     return (height / width == 1 && height % width == 6); 
   }
}

我创建了函数isGoldenRatio()来检查边的比例。 但我认为这是错误的,因为我没有得到理想的结果。

更新 我不能在我的班级中定义添加字段,我不能使用数学库。

知道如何修复这个功能吗?

4 个答案:

答案 0 :(得分:3)

为了避免浮动问题,您可以使用数学,只需执行

return (height * 10) == (width * 16);

为了解释它,你得到了等式:

H / W = 1.6       / multiply by 10
10 * H / W = 16   / multiply by W
10 * H = 16 * W

答案 1 :(得分:0)

如果你想要那个数字,你可以改变它以将它们转换成双倍并像这样比较

public boolean isGoldenRatio()
{
 return ((double)height / width == 1.6);
}

答案 2 :(得分:0)

你需要做的就是除法,然后先将分子强加到float。你还需要决定它与金色的接近程度。

class Rectangle {
    private int x, y;
    private int height, width;
    private final static float FLOAT_THRESH = .01;

    public boolean isGoldenRatio()
    {
        return Math.abs(1.6 - (float)height / width) < FLOAT_THRESH;
    }
}

答案 3 :(得分:0)

使用数学来避免使用浮点数。斐波纳契数的比率接近分母平方内的黄金比率。 e.g。

1/1, 2/1, 3/2, 5/3, 8/5, 13/8, ...

分别在黄金比例的1 / 1,1 / 1,1 / 4,1 / 9,1 / 25,1 / 64,......之内。

所以你可以用整数或有理数来完成数学运算。

如果你希望在21/13附近的两个小数点之内。所以检查是否

-1 <= 21*height - 13*width <= 1

反之亦然,高度和宽度互换。