美文网首页
以动画的形式画多边形(JAVA)

以动画的形式画多边形(JAVA)

作者: 雨之都 | 来源:发表于2019-01-29 00:09 被阅读0次

    最初的目标

    给定正多边形中心,给定正多边形边数,画一个正多边形出来。

    需要使用的数学知识有

    1.正多边形任意相邻两个顶点所成夹角相等,并且其度数为360/N(边数)

    2.三角函数的知识,从下图可以得到任意顶点Px=(CenterX+cos(a*x),CenterY+sin(a*x));其中x为下标,(CenterX,CenterY)为中心坐标

    接着实现就好;


    图摘自简书文章https://www.jianshu.com/p/6d84b901becd


    实现之后

     在上面的基础上,做了如下改动

    1.只单纯画顶点,而不连接边

    2.让多边形的顶点以一定的概率成对连线,并且以动画的形式实现。具体代码如下

    ```

    import edu.princeton.cs.algs4.StdDraw;

    import edu.princeton.cs.algs4.StdRandom;

    import java.util.Arrays;

    public class StdTest {

        public static void main(String[] args)

        {

          int N=10;

          double rate=0.41;

          double cirSize=5;

          double distance=5;

          int totalSize=50;

    //      Point[] points=new Point[N];

          drawPolygon(45,rate);

        }

        static void drawPolygon(int N,double rate)

        {

          StdDraw.setCanvasSize(1000,1000);

          StdDraw.setXscale(0,N);

          StdDraw.setYscale(0,N);

          StdDraw.setPenRadius(0.01);

            double[] xs=new double[N];

            double[] ys=new double[N];

            double centerX=N/2.0;

            double centerY=N/2.0;

            xs[0]=N;

            ys[0]=N/2.0;

            for(int i=1;i<N;i++)

            {

                double radis=Math.PI*2/N*i;

                xs[i]=Math.cos(radis)*N/2+centerX;

                ys[i]=Math.sin(radis)*N/2+centerY;

            }

       //     xs[N]=N;

          //  xs[N]=N/2.0;

            System.out.println(Arrays.toString(xs));

            System.out.println(Arrays.toString(ys));

            for(int i=0;i<N;i++)

            {

                StdDraw.point(xs[i],ys[i]);

            }

            int startUp=0;

            while (startUp<N-1)

            {

                for(int i=startUp+1;i<N;i++)

                {

                    if(StdRandom.random()<=rate)

                    {

                        StdDraw.line(xs[startUp],ys[startUp],xs[i],ys[i]);

                        try {

                            Thread.sleep(500);

                        } catch (InterruptedException e) {

                            e.printStackTrace();

                        }

                    }

                }

                startUp++;

            }

        }

    }

    ```

    程序所依赖的库可以在算法第四版这本书的配套网站下下载。程序比较简单,也没有什么可说的点。但是笔者表示虽然程序很简单。但是实现之后看起来的效果非常解压。

    相关文章

      网友评论

          本文标题:以动画的形式画多边形(JAVA)

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