使用Java语言,通过设计实验的方法,利用随机函数,在一个10*10的正方形中,计算其内切三角形的面积。

使用Java语言编写一个程序,通过设计实验的方法,利用随机函数,在一个10*10的正方形中,计算其内切三角形的面积。

注(思路):使用用随机函数实验求面积,计算三角形和正方形面积之比是多少,进不步求出三角形的面积。

正方形里面的三角形,有几种情形:

(1)三角形一条边正好重叠正方形一条边,另外一点在正方形对面一条边的中点;

(2)三角形一条边正好重叠正方形一条边,对面一点可以随意设置而构成的三角形;

(3)三点在正方形不同的三条边上,这三点随机产生。

用实验模拟方法求出三角形面积,实验方法就是统计10000个以上随机点落在三角形里面的数量,然后再试10万以上个随机点的情况,等等。

创建3个函数,分别对应3个三角形的创建方法,用随机数生成0-3的随机数,用来确定跟那条边重叠,代码如下:


public class Triangle {
    private int nlen; //边长
    private int xstart;  //矩形左下角x坐标
    private int ystart; //矩形左下角y坐标
    
    private double[][] points; //三个顶点
    
    
    Triangle(int x,int y,int len){
        xstart = x;
        ystart = y;
        nlen = len;
        points = new double[3][2];
    }
    Triangle(int len){
        xstart = 0;
        ystart = 0;
        nlen = len;
        points = new double[3][2];
    }
    
    
    //三角形一条边正好重叠正方形一条边,另外一点在正方形对面一条边的中点
    void create1(){
        int index = (int)(Math.random()*3); //生成0-3的随机数,对应 左边、上边、右边、下边
        switch(index)
        {
        case 0: //左边
            points[0][0] = xstart;
            points[0][1] = ystart;
            points[1][0] = xstart;
            points[1][1] = ystart + nlen;
            points[2][0] = xstart + nlen;
            points[2][1] = ystart + nlen/2.0;
            break;
        case 1: //上边
            points[0][0] = xstart;
            points[0][1] = ystart + nlen;
            points[1][0] = xstart + nlen;
            points[1][1] = ystart + nlen;
            points[2][0] = xstart + nlen/2.0;
            points[2][1] = ystart;
            break;
        case 2: //右边
            points[0][0] = xstart + nlen;
            points[0][1] = ystart + nlen;
            points[1][0] = xstart + nlen;
            points[1][1] = ystart;
            points[2][0] = xstart;
            points[2][1] = ystart + nlen/2.0;
            break;
        case 3: //下边
            points[0][0] = xstart;
            points[0][1] = ystart;
            points[1][0] = xstart + nlen;
            points[1][1] = ystart;
            points[2][0] = xstart + nlen/2.0;
            points[2][1] = ystart + nlen;
            break;
        }
    }
    
    //三角形一条边正好重叠正方形一条边,对面一点可以随意设置而构成的三角形
    void create2(){
        int index = (int)(Math.random()*3); //生成0-3的随机数,对应 左边、上边、右边、下边
        switch(index)
        {
        case 0: //左边
            points[0][0] = xstart;
            points[0][1] = ystart;
            points[1][0] = xstart;
            points[1][1] = ystart + nlen;
            points[2][0] = xstart + nlen;
            points[2][1] = (int)((nlen*Math.random()))+ystart;
            break;
        case 1: //上边
            points[0][0] = xstart;
            points[0][1] = ystart + nlen;
            points[1][0] = xstart + nlen;
            points[1][1] = ystart + nlen;
            points[2][0] = (int)((nlen*Math.random()))+xstart;
            points[2][1] = ystart;
            break;
        case 2: //右边
            points[0][0] = xstart + nlen;
            points[0][1] = ystart + nlen;
            points[1][0] = xstart + nlen;
            points[1][1] = ystart;
            points[2][0] = xstart;
            points[2][1] = (int)((nlen*Math.random()))+ystart;
            break;
        case 3: //下边
            points[0][0] = xstart;
            points[0][1] = ystart;
            points[1][0] = xstart + nlen;
            points[1][1] = ystart;
            points[2][0] = (int)((nlen*Math.random()))+xstart;
            points[2][1] = ystart+nlen;
            break;
        }
    }
    
    //生成三角形,3个点在不同的3条边上
    void create3(){
        int index = (int)(Math.random()*3); //生成0-3的随机数,对应 左边、上边、右边、下边
        //排除该边,使用剩余的3条边
        switch(index)
        {
        case 0: //不用左边
            //上边点
            points[0][0] = (int)((nlen*Math.random()))+xstart;
            points[0][1] = ystart+nlen;
            //右边点
            points[1][0] = xstart + nlen;
            points[1][1] = (int)((nlen*Math.random()))+ystart;
            //下边点
            points[2][0] = (int)((nlen*Math.random()))+xstart;
            points[2][1] = ystart;
            break;
        case 1: //不用上边
            //左边点
            points[0][0] = xstart;
            points[0][1] = (int)((nlen*Math.random()))+ystart;
            //右边点
            points[1][0] = xstart + nlen;
            points[1][1] = (int)((nlen*Math.random()))+ystart;
            //下边点
            points[2][0] = (int)((nlen*Math.random()))+xstart;
            points[2][1] = ystart;
            break;
        case 2://不用右边
            //左边点
            points[0][0] = xstart;
            points[0][1] = (int)((nlen*Math.random()))+ystart;
            //上边点
            points[1][0] = (int)((nlen*Math.random()))+xstart;
            points[1][1] = ystart + nlen;
            //下边点
            points[2][0] = (int)((nlen*Math.random()))+xstart;
            points[2][1] = ystart;
            break;
        case 3: //不用下边
            //左边点
            points[0][0] = xstart;
            points[0][1] = (int)((nlen*Math.random()))+ystart;
            //上边点
            points[1][0] = (int)((nlen*Math.random()))+xstart;
            points[1][1] = ystart+nlen;
            //右边点
            points[2][0] = xstart + nlen;
            points[2][1] = (int)((nlen*Math.random()))+ystart;
            break;
        }
    }
    
    
    //计算边长
    double triLength(double x1,double y1,double x2,double y2){
        return Math.sqrt((y2-y1)*(y2-y1) + (x2-x1)*(x2-x1));
    }
    
    //计算三角形的面积
    double area(){
        double a = triLength(points[0][1],points[0][0],points[1][1],points[1][0]);
        double b = triLength(points[0][1],points[0][0],points[2][1],points[2][0]);
        double c = triLength(points[2][1],points[2][0],points[1][1],points[1][0]);
        double q = (a+b+c)/2;
        return Math.sqrt(q*(q-a)*(q-b)*(q-c));
    }
    
    //显示坐标点
    void show(){
        System.out.print("("+points[0][0]+","+points[0][1]+") ");
        System.out.print("("+points[1][0]+","+points[1][1]+") ");
        System.out.println("("+points[2][0]+","+points[2][1]+")");
    }
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Triangle t1 = new Triangle(10);
        t1.create1();
        t1.show();
        System.out.println("area="+t1.area());
        
        Triangle t2 = new Triangle(10);
        t2.create2();
        t2.show();
        System.out.println("area="+t2.area());
        
        Triangle t3 = new Triangle(10);
        t3.create3();
        t3.show();
        System.out.println("area="+t3.area());
        
        
    }

}


参考一下呢

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632