Рисование закрашенного круга с матрицей в C - PullRequest
0 голосов
/ 01 ноября 2018

Я сделал программу на 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;
}

1 Ответ

0 голосов
/ 01 ноября 2018

Вы забыли сбросить 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...