如何在浮点数数组中创建一个由 1 组成的圆圈
Posted
技术标签:
【中文标题】如何在浮点数数组中创建一个由 1 组成的圆圈【英文标题】:How to create an circle of 1s in an array of floats 【发布时间】:2021-12-27 03:12:09 【问题描述】:问题
我需要使用浮点数组创建一个圆形轮廓。函数 CircleOutline(int res, int r1, int r2)
完成了我想要的。
它创建一个 float
数组,其中未填充的圆圈(圆圈轮廓)为 1。其他都是 0。
但是,我只需要一组 xy for loops
。
这部分 if ((c - x) * (c - x) + (c - y) * (c - y) < r1_2)
填充了圆周内的所有内容。
我认为,但不确定,我需要与此相反(填充外部)。
概念
这是我认为可行的伪代码:
if (current index is inside circumferenceA)
if (current index is outside circumferenceB)
map.add(1);
圆形轮廓浮点数组
static float [] CircleOutline(int res, int r1, int r2)
float [] map = new float[res * res];
float c = res / 2;
float r1_2 = r1 * r1;
for (int x = 0; x < res; x++)
for (int y = 0; y < res; y++)
if ((c - x) * (c - x) + (c - y) * (c - y) < r1_2)
map[x + y * res] = 1f;
float r2_2 = r2 * r2;
for (int x = 0; x < res; x++)
for (int y = 0; y < res; y++)
if ((c - x) * (c - x) + (c - y) * (c - y) < r2_2)
map[x + y * res] = 0f;
return map;
【问题讨论】:
【参考方案1】:因为没有专门针对使用浮点数组的轮廓的答案,并且因为我刚刚弄清楚了,所以我将发布我的答案:
float [] map = new float[res * res];
float c = res / 2;
float r1_2 = r1 * r1;
for (int x = 0; x < res; x++)
for (int y = 0; y < res; y++)
if ((c - x) * (c - x) + (c - y) * (c - y) < r1_2)
if ((c - x) * (c - x) + (c - y) * (c - y) > r2_2)
map[x + y * res] = 1f;
我写了pseduo代码后才知道。
【讨论】:
但是,我只需要一个 for 循环就可以做到这一点 - 但是.. 解决方案使用两个 for 循环? 更新了问题以反映错误。 1 表示 x 长度分辨率,1 表示 y 长度分辨率。我的团队负责人在长度分辨率 x 分辨率下使用 1,然后在内部创建和 xy 变量,这样他就可以使用 i 轻松地将像素传递到浮动地图中。他更喜欢使用一个循环,所以他在下达指令时总是将其称为一个循环。我忘了翻译成现实世界的术语。我需要它使用 2 个循环而不是 4 个。以上是关于如何在浮点数数组中创建一个由 1 组成的圆圈的主要内容,如果未能解决你的问题,请参考以下文章