美文网首页
每日一练80——Java正多边形中的圆(8kyu)

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

作者: 砾桫_Yvan | 来源:发表于2018-08-23 10:52 被阅读0次

题目

您是制盒公司的所有者。

您的公司可以生产任何相等的多边形盒子,但是很多客户希望在这些盒子中运输圆形物体。圆形是消费行业中非常普遍的形状。锡罐,眼镜,轮胎和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就好,原因不明。

相关文章

网友评论

      本文标题:每日一练80——Java正多边形中的圆(8kyu)

      本文链接:https://www.haomeiwen.com/subject/qshpiftx.html