Я сделал программу на C.
Что он делает или должен делать, так это нарисовать заполненный круг, отображая значения матрицы.
Вы можете ввести значения радиуса круга, положение центра круга относительно центра матрицы и размер матрицы, то есть разрешение.
Таким образом, когда он дает значения ячеек матрицы, он проверяет, находится ли ячейка (или точка) внутри круга.
Для каждой ячейки есть точка, определяемая переменными x и y. Когда точка находится внутри круга, это означает, что число, которое мы получаем путем вычисления уравнения круга со значениями x и y, меньше радиуса квадрата в квадрате.
Если точка находится внутри окружности, программа присваивает значение соответствующей ячейке 1. В противном случае оно равно 0.
Итак, в конце она должна отображать матрицу, и она должна выглядеть как группа нулей, а внутри есть заполненный круг, сделанный из них.
Проблема:
Программа работает, я могу ввести нужные ей значения (например, радиус равен 50, позиция x равна 0, позиция y равна 0 и разрешение (размер матрицы) составляет 150), но когда предполагается, что матрица должна отображаться он печатает только нули.
Что-то в корне не так с моей программой? Что может вызвать проблему?
Заранее спасибо!
Мой код:
#include <stdio.h>
int main()
{
float x = 0, y = 0, ypos= 0 , xpos = 0, radius = 0, rsqrd = 0, rcheck = 0;
int matsize = 0, i, j;
printf("Value of radius:");
scanf("%f" , &radius);
printf("Position of circle on the x axis:");
scanf("%f" , &xpos);
printf("Position of circle on the y axis:");
scanf("%f" , &ypos);
printf("Resolution:");
scanf("%d" , &matsize);
printf("\n");
rsqrd = radius*radius; //rsqrd is equal to radius squared.
x = -1*(matsize/2); //with this I make sure that the x and y values start from the top right corner of the matrix, so that each x, y value corresponds to the correct cell position (i, j)
y = matsize/2;
int mat[matsize][matsize];
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;
}
for(i = 0; i < matsize; i++) // displaying the matrix
{
for(j = 0; j < matsize; j++)
{
printf("%d ",mat[i][j]);
}
printf("\n");
}
return 0;
}