每日一练80——Java正多边形中的圆(8kyu)

题目

您是制盒公司的所有者。

您的公司可以生产任何相等的多边形盒子,但是很多客户希望在这些盒子中运输圆形物体。圆形是消费行业中非常普遍的形状。锡罐,眼镜,轮胎和CD就是其中的一些例子。

因此,您决定在盒子上添加此信息:可放入给定盒子的最大(直径)圆形对象。

测试用例:

import static org.junit.Assert.assertEquals;
import org.junit.Test;

public class PolygonTest {

    @Test
    public void test1(){
        //Square with sides of 5 units
        Polygon poly=new Polygon(4, 5);
        assertEquals("5.000", String.format("%.3f", poly.circleDiameter()));
    }
    
    @Test
    public void test2() {
        //Octogon with sides of 9 units
        Polygon poly=new Polygon(8, 9);
        assertEquals("21.728", String.format("%.3f", poly.circleDiameter()));
    }
    
    @Test
    public void test3() {
        //Triangle with sides of 4 units
        Polygon poly=new Polygon(3, 4);
        assertEquals("2.309", String.format("%.3f", poly.circleDiameter()));
    }
}

解题

MY

public class Polygon {
    int sides;
    int sideLength;

    public Polygon(int sides, int sideLength) {
        this.sides = sides;
        this.sideLength = sideLength;
    }
    
    public double circleDiameter(){
        return sideLength / Math.tan(Math.PI/sides);
    }
    
}

还不知道为啥用tan里用角度不行,可能是有误差较大,但是在我的IDE还是没有问题的,return sideLength / Math.tan(Math.toRadians(180/sides));

后记

这题要点数学基础,我想了老半天,捡起了高中数学知识,公式如下

半径r = (边长a/2) × cot (180/边数n)

引申一下

直径R = 边长a / Math.tan (π/边数n)

后来发现他人解题

return sideLength / Math.tan(Math.toRadians(180d/sides))

180加上一个d就好,原因不明。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 拖着树哥在雨天从四平佳乐家走到泰华,我连手都腾不出来牵着他,更不用说我会有空手给他打伞,所以我们俩就在簌簌的雨滴里...
    随棉很懒阅读 224评论 0 0
  • 03413许姝萍 近来,女儿在午托中午觉说自己睡不着,我也是很苦闷,一直还说不想去上学呢。我也在想办法如何...
    xushuping阅读 1,556评论 0 0
  • 极力模糊对与错的边界,让臆想的坦然与伪装的正义和自身维度融为一体飘散于大自然后悄然隐去阴沉的气息,让人际怪圈里...
    无声扰人心阅读 292评论 5 3