数学吧 关注:890,976贴子:8,757,670

谁帮我设计一个算法,要满足的效果是在一个正方形上随机一个形状

只看楼主收藏回复

如图


IP属地:湖北1楼2023-09-13 17:21回复
    比如一个二维数组,100x100
    然后随机一个形状(占据的每个格子)


    IP属地:湖北2楼2023-09-13 17:22
    收起回复
      要什么要求吗,没要求的话每个格点随机有颜色或者无颜色。


      IP属地:陕西来自Android客户端3楼2023-09-13 17:25
      收起回复

        像这种就是错误的,因为存在不连续的格子


        IP属地:湖北4楼2023-09-13 20:31
        收起回复
          要是只要达到这个目的还是简单的啊
          第一步:随机取一个格子
          第二步:考虑取的点的相邻格子,每个格子概率p被取到.未被取到的也保存一下,它们以后不可以再被取到.
          第三步:考虑第二步取到的格子的相邻格子,对它们实行第二步.
          套下去,直到所有格子被处理或者某一轮所有格子都不被取到.
          这个生成的明显只会是一坨,而且所有连通的都能生成.


          IP属地:陕西来自Android客户端5楼2023-09-13 22:33
          收起回复
            随便选几个点 然后凸包不就结了


            IP属地:浙江来自iPhone客户端6楼2023-09-14 00:26
            回复
              没有特殊要求的话就在正方形范围内随机一个点集,然后取正方形中心对点集角排序,依序连接所有点不就可以了吗


              IP属地:海南来自Android客户端7楼2023-09-14 02:49
              收起回复
                定义一个二维坐标系,正方形上的点都可以用(x,y)表示。
                在其范围内随机取一个点A,着色。
                然后对点A的纵横坐标随机变化(+1,-1,或不变,共3×3种变化,得到与其相邻的点的坐标,着色。
                判断是否在正方形范围内,若不在,则重新生成。
                记录最后一次着色的点,下一次以该点为基点。
                不必分辨其是否已着色,重复着色也无所谓的。
                随机进行0-n次(n为正方形边长)。


                IP属地:陕西来自Android客户端8楼2023-09-14 06:13
                收起回复
                  要求是联通还是单联通?
                  或者说环形符合lz的要求吗


                  IP属地:山东来自Android客户端9楼2023-09-14 09:23
                  回复
                    正方形内任取一点A0,规定一个步长(比如正方形边长的1%),从A0点出发随机选一个方向走步长到A1,此后按如下规则迭代:
                    设An-1An与AnA0夹角为θn,设计一个参数λn属于(0, 1),λn关于n以合适的速率单增。将An-1An的延长线向AnA0方向旋转λnθn,以这条射线为中心画一个半顶角15度的扇形,扇形内随机选一个方向前进一个步长到An+1。
                    如果线段AnAn+1与画板边界或已有线段相交,重新取An+1;连续三次重新取,回退到An-1,再重新取。
                    如果An到A0的距离小于步长,直接连接AnA0,迭代结束


                    IP属地:浙江来自Android客户端10楼2023-09-14 10:32
                    收起回复
                      随机生成形状,然后给你们公司登录界面加一个验证码,选出以下连续的图形


                      IP属地:上海来自Android客户端11楼2023-09-14 11:09
                      收起回复
                        OK,此贴终结,比如看下来,还是7楼的方法比较直接
                        目前诸位提供了大体3种思路:
                        1.随机选择一个点,然后以这个起点向四周递归概率扩散。(这个方法是能保证随机出一个形状,但是如果面积太大的话会计算量很大,小范围还行)
                        2.随机一个点集,然后凸包(这个方法相比第一种更为直接,但是貌似只能形成凸多边形?可能我不太了解)
                        3.同样随机一个点集,然后排序并连接这些点,然后将内部每个点都加入【目前楼主采用的是这个方法,相比第二种方案,这个形成的形状更加随意,不限于凸边,也可以出现凹边】
                        ——————下面是我实际应用的效果(随机形成坑,当然还需要解决新的问题,水坑边缘到内侧的高度过渡问题)————




                        IP属地:湖北12楼2023-09-14 14:31
                        收起回复
                          先生成一个随机点,然后向上下左右四个方向分别拓展,每拓展一次取随机数,如果随机数小于某个阈值则停止拓展。


                          IP属地:四川来自Android客户端14楼2023-09-15 11:43
                          回复
                            随机一些点求个凸包?


                            IP属地:江苏来自Android客户端15楼2023-09-15 15:58
                            回复
                              随机选择一个初始点,然后像四周随机扩散嘛,每步每个方向都有一定几率停止


                              IP属地:贵州来自Android客户端16楼2023-09-15 17:38
                              回复