- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
因为我是新手,所以我带着另一个虚拟问题回来了。我用 c 语言编写了一段代码,使用 Bresenham 算法填充二维数组。代码用连续的圆圈填充二维数组:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
double *v;
int i;
v = (double*)malloc(101*101*sizeof(double));
for(i=0;i<101*101;i++)
{
v[i]=0.0;
}
for(i=0;i<73;i++)
{
draw_circle(v, 101,101,51,51,i,(double)i);
}
write_arraya(v,"test.txt",101,101);
free(v);
return 1;
}
它使用了 Bresenham 算法
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void draw_circle (double *v, int m, int n, int xr, int yr, int radius, double value)
{
int x, y;
int l;
l = (int) radius * cos (M_PI / 4);
for (x = 0; x <= l; x++)
{
y = (int) sqrt ((double) (radius * radius) - (x * x));
set_value (v, m, n, xr+x-1, yr+y-1, (double)value);
set_value (v, m, n, xr+x-1, yr-y-1, (double)value);
set_value (v, m, n, xr-x-1, yr+y-1, (double)value);
set_value (v, m, n, xr-x-1, yr-y-1, (double)value);
set_value (v, m, n, xr+y-1, yr+x-1, (double)value);
set_value (v, m, n, xr+y-1, yr-x-1, (double)value);
set_value (v, m, n, xr-y-1, yr+x-1, (double)value);
set_value (v, m, n, xr-y-1, yr-x-1, (double)value);
printf("x= %d, y=%d\n", x, y);
}
}
并通过以下方式设置值:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void set_value (double *v, int m, int n, int i, int j, double value)
{
if(i>=0 && i<m && j>=0 && j<n)
{
v[i*n+j]=(double)value;
}
}
并将它们写入文本文件
#include <stdio.h>
#include <stdlib.h>
void write_arraya(double *v, char file_name[], int row, int col)
{
FILE *fp;
int i, j;
fp = fopen(file_name, "w");
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
fprintf(fp,"%e ",v[i*col+j]);
}
fprintf(fp,"\n");
}
fclose(fp);
}
这些都可以正常工作,但主要问题是数组中未填充的元素。有些元素仍然具有零值。我想用适当的值填充这些值。请注意,代码的速度对我来说很重要,因此欢迎提出任何其他建议。有什么想法吗?我附上了我从文本文件中观察到的图
深蓝色像素(大部分为黑色)是数组中未填充的元素
最佳答案
一种不雅观的方法是为每个可能的半径绘制 2 个(或者如果需要的话 3 个)不同的圆,但中心点略有不同(一个用于 x,y,另一个用于 x+1, y)。 - 在这种情况下,您的数组必须足够大以处理移动的圆圈(有一个额外的列)。
一个更好的解决方案是根本不画圆圈。只需遍历像素,获取它们与中心的距离(使用毕达哥拉斯定理,它已在您的代码中使用),然后根据距离计算颜色。 - 你可以优化它只做四分之一的区域。并进一步优化只做八分之一。
关于c - C中二维数组中的连续圆与Bresenham的圆算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19075647/
我正在尝试为 2D 方 block 游戏编写一个闪电引擎。与大多数游戏一样,我在 map 上有一个 map [][]和一个光照贴图[][]。没什么特别的。从一个光点,我在灯光范围内画一个圆圈,并尝试将
我已经实现了 Bresenham 圆算法。但这段代码只输出一个白色窗口。不绘制圆边界的单个像素。 该函数绘制 8 个对称点。 void plot_point(int x, int y, int xc,
我正在尝试使用 Bresenham 算法在 C 语言中画一条线。我在 Windows 7 的 dosbox 中使用 turbo C++ 来实现此代码。编译时我没有收到任何错误,但是当我运行代码时程序在
我有以下代码 bresenham's algorithm表示适用于 Scala Java 代码。 def bresenham(x0: Int, y0: Int, x1: Int, y1: Int) =
我正在寻找这种行为 http://www.brainjunkie.com/web/js-wordsearch/但有了这个盒子: div { display: inline-block; wid
代码在第一次调用 positionGenerator(1046,1623,750,1290); 时运行良好,但在第二次调用 positionGenerator(1046,1623,375,810);
我试图用星星(*)填充矩阵来绘制布雷森汉姆线,但是当我打印出这个东西时,矩阵只填充了一颗星星,我不知道出了什么问题。语言是Java public class PtLine extends Vector
我正在尝试使用 Bresenham's Line Drawing Algorithm在 20x20 的瓷砖网格上画一条线。 所以基本上,当变量 deltaerror(来自 wiki)大于 1(当 y
我创建了一个函数,它接受一个 2D std::vector, vector 中的 2 个点,并在 vector 中“绘制”一条线。但是,它并不涵盖所有情况(八分圆)。一条线是指在一条直线上相互连接的点
Bresenham 的浮点算法中有些东西让我很烦。 算法如下: void line(x0, x1, y0, y1) { int deltax = x1 - x0; int deltay = y
我编写了这段代码。这段代码处理 dx 和 dy 大于 0 的情况。但是当其中一个小于 0 时该怎么办。算法说 m 应该作为绝对值,x 和 y 应该递减。但是如何在第二个 for 循环中递减 i(x)?
https://www.geeksforgeeks.org/bresenhams-circle-drawing-algorithm/ 我正在查看 Bresenham 的算法,我试图用它来制作 MS 绘
我正在使用中点圆算法(也称为 Bresenham 算法)来绘制同心圆。每个圆的半径与下一个圆的半径之差始终为 1,因此最终结果应该是一个完整的圆形区域。 但是,如附图所示,一些像素留空。 我正在使用
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我有以下绘制圆的代码: #include #include #include #include void main() { int xc, yc, x, y, p[100], r, k;
我有一个练习,我想用 Bressenham 算法画一条线。问题是它对向下和向右的线路非常有效,但是当线路向上或向后时,它就不再工作了......有人可以帮助我吗? void draw_line(
我在 HTML Canvas 上画线,并使用不太精确的二维数组(表示 10x10 像素的 block ),我在其中使用 Bresenham 算法“画”线以存储线 ID,因此我可以使用该数组查看选择了哪
嗨,我正在尝试编写一些基本代码来实现 Bresenham 算法,但我一直在尝试使用 round和/ 。我的代码是: bresenhamAlgorithm :: Coord -> Coord -> In
我编写了一个小程序,它根据用户输入 x1,y1 和 x2,y2 绘制一条线。由于某种原因,线条只能在水平时起作用,但是一旦线条应该是垂直的,它只会向我显示黑色像素而不是线条。我已经检查了所有内容,并且
我有一个像素 电话 在网格上。我想知道该像素是否会出现在 bresenham 上之间生成的线P0 和 P1 没有实际生成线。这有可能提出这样的决定因素吗? 最佳答案 我正在写这个作为答案,即使它只是一
我是一名优秀的程序员,十分优秀!