我需要定义一个对象(或一个区域),它是一种在离散网格图上形状的“斑点”。它应该是这样的:
其中红色区域表示中心点(这些只是想法,只要可以随机变化,任何斑点形状都可以)。到目前为止,我的想法是迭代地将角度从起点(= 0 度)增加到 360 度,并使用三角学来计算圆的外点(如果半径 = 1 = 常量,这将导致单位圆)。然后我使用 Bresenham 的线算法(记住:我们在离散网格上移动)来计算连接圆心和我刚想出的外点的线。我的想法是,如果我可以稍微改变半径,我可以创建这些斑点形状。到目前为止我想出的形状给了我很好的形状,但它们并不是真正的“斑点”。这是我的代码(注意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)
}
Run Code Online (Sandbox Code Playgroud)
结果如下所示:
抱歉画的粗糙。编程语言是 C++,但我认为这种方法并不真正取决于所使用的语言。关于如何创建与我需要的形状相似的形状的任何提示/帮助/指导?或者甚至是一个为你做这样的事情的框架?对我来说,将点的坐标放入我的网格图中很重要。