我用C语言编写了一个程序。
它应该做或应该做的是通过显示矩阵值来绘制一个实心圆。
您可以输入圆的半径,圆心相对于矩阵中心的位置以及矩阵的大小(即分辨率)的值。
因此,当给出矩阵单元格的值时,它将检查单元格(或点)是否在圆内。
对于每个单元,都有一个由变量x和y确定的点。当该点在圆内时,这意味着我们通过计算x和y值的圆的方程得到的数小于圆的平方的半径。
如果点在圆内,则程序将相应单元格的值设为1。否则将其设为0。
因此,最后应该显示矩阵,看起来应该像一堆零,并且内部有一个由1组成的实心圆。
问题:
程序运行正常,我可以键入所需的值(例如,半径为50,x位置为0,y位置为0,分辨率(矩阵大小)为150),但是应该显示矩阵它只打印零。
我的程序有根本的错误吗?是什么原因引起的?
谢谢!
我的代码:
mt[, .(model = .(lm(mpg ~ cyl + disp, data = mt[.I]))), by = .(cyl)]
mt[, .(model = .(lm(mpg ~ cyl + disp))), by =.(cylgroup=cyl)]
mt[, .(model = .(lm(mpg ~ cyl + disp, .SD))), by=cyl, .SDcols=names(mt)]
mt[, .(model = .(lm(mpg ~ cyl + disp, .SD))), by=cyl, .SDcols=TRUE]
mt[, .(model = .(lm(mpg ~ cyl + disp, data = cbind(.SD, as.data.table(.BY))))), by = "cyl"]
答案 0 :(得分:2)
递减x
时,您忘记重设y
。
尝试一下:
for(i = 0; i < matsize; i++)
{
for(j = 0; j < matsize; j++)
{
rcheck = ((y - ypos)*(y - ypos)) + ((x - xpos)*(x - xpos)); // calculating the equation of the circle with the x and y values taking the offset into account
if(rcheck <= rsqrd)
{
mat[i][j] = 1;
}
else
{
mat[i][j] = 0;
}
x = x+1; //stepping the values of x and y so they stay with the corresponding cell
}
y = y-1;
x -= matsize; // <-- Reset x to start of row
}