猫史档案馆


【box3】随机小行星生成代码

用户:trigonometrictrigonometric查看:20 回复:20 评论:20 创建时间:2022-01-22T22:31:17


center_image

function per_1dim(dots,interval){
    var dot1,dot2,dif;
    var y=[];
    var i,j;
    for(i=1;i<dots.length;i++){
        dot1=dots[i];
        dot2=dots[i-1];
        dif=Math.abs(dot1-dot2);
        if(dot1<dot2){
            for(j=0;j<=3.14;j+=3.14/interval){
                y.push(dot2+(Math.cos(j)-1)/2*dif);
            }
        }else{
            for(j=3.14;j>=0;j-=3.14/interval){
                y.push(dot2+(Math.cos(j)+1)/2*dif);
            }
        }
    }
    return y;
}
function per_2dim(interval,min,max){
    var dots=[],y1=[],y2=[],y3=[];
    var x,y,z;
    for(x=0;x<=256;x+=interval){
        dots.push([]);
        for(z=0;z<=256;z+=interval){
            y=min+Math.random()*(max-min);
            dots[x/interval].push(y);
        }
    }
    for(x=0;x<=256;x+=interval){
        y1.push(per_1dim(dots[x/interval],interval));
    }
    for(x=0;x<=256;x++){
        y2.push([]);
        for(z=0;z<=256;z+=interval){
            y2[x].push(y1[z/interval][x]);
        }
    }
    for(x=0;x<=256;x++){
        y3.push(per_1dim(y2[x],interval));
    }
    return y3;
}
function per_3dim(interval,min,max){
    var y1=[],y2=[],y3=[];
    var x,y,z;
    for(y=0;y<=喵;y+=interval){
        y1.push(per_2dim(interval,min,max));
    }
    for(x=0;x<=256;x++){
        y2.push([]);
        for(z=0;z<=256;z++){
            y2[x].push([]);
            for(y=0;y<=喵;y+=interval){
                y2[x][z].push(y1[y/interval][x][z]);
            }
        }
    }
    for(x=0;x<=256;x++){
        y3.push([]);
        for(z=0;z<=256;z++){
            y3[x].push(per_1dim(y2[x][z],interval));
        }
    }
    return y3;
}
async function asteroid(density){
    var x,y,z;
    var per32=per_3dim(32,0,100);
    var per16=per_3dim(16,0,100);
    var per8=per_3dim(8,0,100);
    var l=[];
    for(x=0;x<=256;x++){
        l.push([]);
        for(z=0;z<=256;z++){
            l[x].push([]);
            for(y=0;y<=喵;y++){
                l[x][z].push(Math.ceil((per32[x][z][y]+per16[x][z][y]+per8[x][z][y])/3));
            }
        }
    }
    for(x=0;x<=256;x++){
        for(z=0;z<=256;z++){
            for(y=0;y<=喵;y++){
                if(l[x][z][y]>density){
                    voxels.setVoxelId(x,y,z,129);
                }
            }
        }
        await sleep(100);
    }
}
asteroid(70);


回复

上一页1 页 / 共 1下一页
全能代码师全能代码师

ddd

点赞1


评论


trigonometrictrigonometric

asteroid(density)

参数为小行星密度

范围0~100,数值越小小行星越密集,过大会串联在一起

点赞2


评论


YDS尹子YDS尹子

三维噪声?

点赞4


评论


IaeaIaea

dddd

点赞1


评论


trigonometrictrigonometric

原理:

一维噪声:生成多个在同一条直线且间隔相等的点,在点与点之间“平滑”形成新的点;
二维噪声:生成多个z间隔相等的一维噪声,遍历x轴,在该x轴上的点与点之间“平滑”形成新的点;
三维噪声:生成多个y间隔相等的二维噪声,分别遍历x轴和z轴,在该x、z轴上点与点之间“平滑”形成新的点。
提示:以上所有点均表示数值,在利用二维噪声生成地形时所有点的数值表示为y,在利用三维噪声生成小行星时所有点表示一个数值,如果该数值超过了界限之后,则执行相应程序。

点赞3


评论


不知道该叫啥的一只萌新不知道该叫啥的一只萌新

拜膜大佬(

我只会一二维的高斯模糊...

点赞1


评论


浮生awa浮生awa

隐藏大佬?!!!

点赞2


评论


毛豆501毛豆501

喵d

点赞1


评论


一个STUB用户_14302596一个STUB用户_14302596

喵d

点赞2


评论


Stephan轩Stephan轩

nb啊

点赞1


评论


ZzhAllenZzhAllen

问一下这个代码能在自己的地图里用吗()

点赞0


评论


芜湖咸鱼芜湖咸鱼

woc!真不错,很少能见到这么好的代码了

点赞1


评论


该账号已被封禁该账号已被封禁

柏林,但不是噪声(bushi

点赞1


评论


企鹅vItY企鹅vItY

马喵

点赞1


评论


guxia666guxia666

nb啊

点赞0


评论


用户_869149用户_869149

顶顶顶

点赞0


评论


37303730

ddd

点赞0


评论


NelsonNelson

我还以为函数活了

 

点赞1


评论


SCS_user_8yNg1LeFg6SCS_user_8yNg1LeFg6

哇袄!坟

点赞0


评论


NelsonNelson

哇坟!

点赞0


评论