我需要在离散的网格地图上定义一个“blob”形状的对象(或区域)。它应该看起来像这样:
其中红色区域表示中心点(这只是一些想法,任何blob形状都可以,只要可以随机变化即可)。到目前为止,我的想法是从起始点(= 0度)开始迭代递增角度到360度,并使用三角函数计算圆的外部点(如果半径= 1 = const,则将得到单位圆)。然后使用Bresenham线算法(记住:我们正在移动离散网格上)来计算连接圆心和我刚刚想出的外部点的线。我的想法是,如果我能稍微改变半径,我就可以创建这些blob形状。到目前为止,我想出来的东西给了我很好的形状,但它们实际上并不是“blobby”。这是我的代码(请注意,x0
和y0
标记了我的网格地图的中心点,plotBresenham
只是将所有1s
放在区域中,以便可以可视化网格地图):
double radius = 10;
for(int alpha=0; alpha<360; alpha++) {
double x = cos(alpha*M_PI/180.0)*radius;
double y = sin(alpha*M_PI/180.0)*radius;
if(alpha<45) radius+=0.5;
else if(alpha<90) radius-=0.5;
else if(alpha<135) radius+=0.5;
else if(alpha<180) radius-=0.5;
else if(alpha<225) radius+=0.5;
else if(alpha<270) radius-=0.5;
else if(alpha<315) radius+=0.5;
else radius-=0.5;
plotBresenhamLine(x0,y0,x,y)
}
结果如下所示: 抱歉画得有些粗糙。编程语言是C++,但我认为这种方法并不依赖于使用的语言。您可以给我一些关于如何创建更像我需要的形状的提示/帮助/指导吗?或者有没有能够自动完成这样工作的框架?对我来说,重要的是获得图形中各点的坐标,以将它们放入我的网格地图中。
rand()
呢? - Layne Bernardo